Shell脚本入门面试知识点(全)

命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

导读:本篇文章讲解 Shell脚本入门面试知识点(全),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

课程链接:https://www.bilibili.com/video/BV1hW41167NW/?p=2&spm_id_from=pageDriver&vd_source=ea9ec7c370ef728a582ede44cc461e25

Shell概述

Shell是一个命令行解释器,接收用户命令,调用系统内核
image.png

解析器类型

  • sh
  • bash
  • nologin
  • dash
  • tcsh
  • csh

其中,sh软链接到bash, centos默认解析器是bash

Shell脚本入门

脚本格式

脚本开头指定解析器

#!/bin/bash

一个输出hello,word的脚本 1.sh

#!/bin/bash
echo hello,word

执行脚本

bash 1.sh ---方法1
sh 1.sh  ----方法2
source 1.sh ----方法3

./1.sh  ----方法4,需要给权限,chmod 777 1.sh

多命令行例子

需求在指定目录/home/atguigu/下创建一个banzhang.txt,在banzhang.txt中增加’I Love LSX’ 。

#!/bin/bash
cd /home/atguigu/
touch banzhang.txt
echo "I Love LSX" >> banzhang.txt

Shell中的变量

常用系统变量

$HOME 当前用户的Java目录
$PWD 当前路径
$SHELL 默认的解析器
$USER 当前用户

自定义变量

语法:

  • 定义变量:变量=值
  • 撤销变量: unset 变量
  • 声明静态变量: readonly 变量,不能unset
A=1
echo $A
//输出1

自定义变量规则:

  • 可以由字母、数字和下划线组成,不能以数字开头,环境变量名建议大写
  • 等号两侧不能有空格
  • 在bash中,变量默认类型是字符串类型,无法直接进行数值运算
  • 变量的值如果有空格,需要用双引号或者单引号
  • 可把变量提升为全局环境变量,使用export 变量名

特殊变量

**(1)

n

n

为数字,

n** n为数字,

nn为数字,n表示该脚本名称,$1-$9表示第一到第九个参数,10以上的参数要用大括号括起来
此处参数表示执行脚本时的参数

touch parameter.sh
vim parameter.sh

#!/bin/bash
echo "$0 $1 $2 $3"

image.png
(2)$#
获取所有输入参数个数

#!bin/bash
echo "$0 $1 $2"
echo $#

image.png
(3)∗,@
$*: 代表命令行中所有的参数,把所有参数看成一个整体
$@:代表命令行中所有的参数,把每个参数区分对待

#!bin/bash
echo "$0 $1 $2"
echo $#
echo $*
echo $@

image.png
(4)$?
最后一次执行的命令的返回状态,如果该变量的值为0,说明上一次正确执行了,如果返回非0的数字说明没有正确执行。

运算符

(

(

运算式

)

)

或者

((运算式))” 或者 ”

((运算式))或者[运算式]”
expr +,-,*,/, %
expr运算符间要有空格

expr 2 + 3
expr `expr 2 + 3` \* 4

` 为esc下边的字符,不是英文引号。

s=$[(2+3)*4]
echo $s

条件判断

语法

[ condition ] condition前后要有空格,条件非空即为true

常用判断条件

(1)整数比较

= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于

image.png
(2)文件权限判断

-r 读
-w 写
-x 执行

image.png
(3)文件类型判断

-f 文件存在且是一个常规文件
-e 文件存在
-d 文件存在且是一个目录

image.png
(4)多条件判断

$$ 与,前对才执行后
|| 或

流程控制(重点)

if语句

语法:

if [ condition ];then
	程序
fi
-------或者--------------------
if [ condition ]
	then
		程序
fi

注意:
[ condition ] 中括号和条件判断式之间必须有空格
if后面要有空格

案例:
输入一个数字,如果是1,则输出hello,如果是2,则输出word,如果是其他,什么也不输出

#!/bin/bash
if [ $1 -eq 1 ]
then
	echo "hello"
elif [ $1 -eq 2 ]
then
	echo "word"
fi

执行脚本

bash if.sh 1

输出:hello
image.png

case语句

语法:

case $变量名 in  
	"值 1") 
		程序;; 
	"值 2") 
		程序;; 
	*)
  	程序;;
esac

注意:
case行尾必须为单词in ,每一个模式匹配必须以右括号结尾
双分号;;表示命令序列结束,相当于java中的break
最后的*)表示默认模式,相当于java中的default

案例:

#!/bin/bash
case $1 in  
"1") 
	echo "男士";; 
"2") 
	echo "女士";; 
*)
	echo "人妖";; 
esac

image.png

for循环

语法

for (( 初始值;循环控制条件;变量变化 ))
	do
  	程序
	done

或者

for 变量 in 值1 值2 值3 ... 
	do
		程序
	done

案例:

#!/bin/bash
s=0
for((i=1;i<=100;i++))
do
  	s=$[$s+$i]
done
echo $s
#!/bin/bash

for i in $*
do
  	echo "banzhang xihuan $i"
done

image.png

#!/bin/bash

for i in "$*"
do
  	echo "banzhang love $i"
done

for j in "$@"
do
  	echo "banzhang love $j"
done

image.png

while 循环

语法

while [ condition ]
do 
	程序
done

案例

#!/bin/bash

s=0
i=0
while [ $i -le 100 ]
do
	s=$[$s+$i]
	i=$[$i+1]
done

echo $s

read读取控制台输入

语法

read(选项)(参数)
选项:
  -p: 指定读取值时的提示内容
  -t:指定读取值时等待的事件(秒)
参数
  变量:指定读取值的变量名

案例

!#/bin/bash

read -t 7 -p "input your name" NAME
echo $NAME

函数

系统函数

basename
basename [string/ pathname][suffix] 

功能描述:命令会删除所有的后缀包括最后一个/字符的然后输出字符串;
选项:如果指定suffix 为后缀,basename会将string或者pathname中的后缀去掉;

用来获取文件名

image.png

dirname

dirname 文件绝对路径, 从给定的包含绝对路径的文件名中去除文件名,然后返回剩下的路径
image.png

自定义函数

[ function ] funname[()]
{
	Action;
	[return int;]
}
funname

必须在调用函数地方之前,要先声明函数;
函数返回值,只能通过$?系统变量获得,可以显示加:return 返回,如果不加,将最后一条命令运行结果做为返回值,return后跟数值n(0-255)

#!/bin/bash

function sum()
{
	s=0
	s=$[$1+$2]
	echo $s
}

read -p "input your paramter1:" P1
read -p "input your paramter2:" P2

sum $P1 $P2

image.png

Shell工具

cut

在文件中剪切数据用,从文件中的每一行剪切字节、字符和字段并将这些字节、字符和字段输出
基本用法

cut[选项参数] filename

默认分隔符是制表符
选项参数
-f 列号: 提取第几列
-d 分隔符,按照指定分隔符分割
举例
数据准备
image.png

cut -d " " -f 1 cut.txt

image.png

cut -d " " -f 2,3 cut.txt

image.png

1、先过滤出guan开头的文字行
2、再切割

image.png

3-表示第三列以及第三列后的所有数据

image.png

eth0 内的 inet addr后的ip地址

image.png

sed

一种流编辑器,一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为模式空间,sed命令处理缓冲区中的内容,处理完成后,把内容送往屏幕,接着处理下一行,不断重复。文件内容不改变,除非你使用重定向存储输出。
基本用法

sed [选项参数] `command` filename

选项参数
-e 直接在指令列模式上进行sed的动作编辑
命令功能
a 新增
d 删除
s查找并替换
案例
1、数据准备
image.png
(1)将”mei nv”插入sed.txt第二行下
image.png
2a表示第二行下面新增,源文件并没有改变。
(2)删除sed文件中包含“wo”的行
image.png
(3)将文件中“wo”替换为“ni”
image.png
g 表示全局替换
(4)将文件的第二行删除,并将“wo”替换为“ni”
image.png

awk

强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
基本用法

awk [选项参数] 'pattern1{action1}' filename

pattern:表示awk在数据中查找的内容
action:找到匹配内容时执行命令
选项参数
-F:指定输入文件分隔符
-v:赋值一个用户定义变量
案例
1、数据准备

sudo cp /etc/passwd ./

2、修改文件权限
image.png
3、查看文件内容
image.png
(1)搜索文件以“root”开头的所有行,并输出该行的第7列
image.png
(2)搜索文件以“root”开头的所有行,并输出该行的第1列和第7列,以“,”分隔
image.png
(3)只显示/etc/passwd的第一列和第七列,以逗号分隔,且在所有行前面添加列名user,shell在最后一行添加“dahaige,/bin/zuishuai”。
image.png
BEGIN在所有数据读取行之前执行,END在所有数据执行后执行。
(4)将passwd中的用户id增加数值1并输出
image.png

内置变量

filename:文件名
nr:已读的记录数
nf:浏览记录的域的个数
(1)统计passwd文件名,每行的行号,每行的列数
image.png
(2)切割ip
image.png
(3)查询sed.txt中空行所在的行号
image.png

sort

文件排序
基本用法

sort(选项)(参数)

选项
-n 按照数值大小排序
-r 以相反的顺序排序
-t 设置排序使用的分隔字符
-k 指定需要排序的列
参数
指定待排序文件列表
案例
1、数据准备
image.png
(1)按照第二列倒序排序
image.png

企业真实面试题

image.png
image.png
image.png
image.png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/143794.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!