目录
一、shell基础概念
二、Shell 脚本编写步骤
三、Shell 变量操作
四、Shell 引号规则(重点)
五、字符串操作
六、Shell 预定义变量(内置特殊变量)
七、算术运算(expr)
九、流程控制语句
一、shell基础概念
shell:用户和内核之间沟通的桥梁,既是命令行解释器,又是脚本编程语言
定义与作用:shell负责接收用户输入的命令,翻译成内核看得懂的指令,并执行操作,提供文本界面,让系统通过命令跟用户沟通
分类:
内置命令如cd,echo,pwd无需调用外部程序,直接由解释器执行
外置命令Is grep查找调用对应的可执行程序
二、Shell 脚本编写步骤
1.创建脚本文件 vi xxx.sh 2.提升文件权限 chmod 777 xxx.sh 3.执行该文件 ./xxx.sh
三、Shell 变量操作
1.定义变量:不需要加类型,直接写变量名
a=10 b=20 echo $a $b
2.输入变量:read 变量
read a b //80 90 echo $a $b //80 90
3.取消变量的定义:unset 变量
shell命令,逐行编译
read a //80 read b //90 unset b //80 echo $a $b
4.设置为只读模式:readonly
只读之后无法取消定义,无法修改值
四、Shell 引号规则(重点)
“ ”中的内容,命令解释器会查找之中的变量值,但是如果和字符串结合,需要用{}将变量名括起来
' '中的内容,会直接将其看作字符串输出,无论其中是否有正确的变量
name=123 echo "${name}456" //123456 echo '${name}456' //${name}456 echo '$name456' //$name456 echo "$name456" //输出:空(无任何内容) //双引号中,Shell会尝试解析$name456这个“变量名”,如果 $ 后面的字符无法组成 “合法且已定义的变量名”,Shell 会把整个 $xxx 当作普通字符串输出(相当于没识别到变量)。五、字符串操作
打印字符串(变量)长度:在变量名前加#,且要将带#的整个变量名用{}括起来
按位置截取:${变量名:起始位置:长度} 从起始位置后截长度
按位置截取:${变量名:起始位置} 从起始位置后截到末尾
按位置截取:${变量名:空格负数} 从倒数的第{负数绝对值}的位置开始时截取到末尾
按位置截取${变量名:(负数)} 从倒数的第{负数绝对值}的位置开始时截取到末尾
str="hello world" echo $str //hello world echo ${#str} //11 (字符串长度) echo ${str:6:5} //world echo ${str:6} //world echo ${str:-5} //world echo ${str:(-5)} //world
六、Shell 预定义变量(内置特殊变量)
Shell 的位置参数 / 特殊内置变量,核心作用是:
接收运行脚本时传入的外部参数;
获取脚本 / 进程的基础信息(名称、PID 等)。
echo $0 /1.sh //打印当前脚本命令名称 echo $1 //$1-9外部命令的1-9参数 echo $2 echo $@ //打印所有的外部参数(除了第0个) echo $$ 3309 //打印当前进程ID号 echo $# 0 //打印当前所有外部参数的个数(除了第0个)
七、算术运算(expr)
算数语句 expr
1.算术运算符
expr是用于表达式计算的命令,支持整数运算和字符串处理。
注意:运算符与操作数之间必须空格,否则会被视为字符串。
运算 示例(a=10, b=4) 结果 加法 expr $a + $b 14 减法 expr $a - $b 6 乘法 expr $a \* $b 40 除法 expr $a / $b 2 取余 expr $a % $b 2
变量赋值与输出:
可以将expr的计算结果赋值给变量,再输出变量值:
sum=$(expr $a % $b) echo $sum sum=$a echo $sum # 输出变量a的值
2.关系运算符
用于比较两个数值,返回真 / 假。
运算符 含义 格式示例 -eq 等于 (==) test $a -eq $b -ne 不等于 (!=) test $a -ne $b -gt 大于 (>) test $a -gt $b -ge 大于等于 (>=) test $a -ge $b -lt 小于 (<) test $a -lt $b -le 小于等于 (<=) test $a -le $b -a 逻辑与 (and) test 条件1 -a 条件2 -o 逻辑或 (or) test 条件1 -o 条件2
3.文件运算符
运算符 含义 格式示例 -b 判断是否为块设备文件 test -b 文件名 -x 判断文件是否可执行 test -x 文件名 -w 判断文件是否可写 test -w 文件名 -r 判断文件是否可读 test -r 文件名 -e 判断文件是否存在 test -e 文件名 -f 判断文件是否为普通文件 test -f 文件名 -d 判断文件是否为目录文件 test -d 文件名 -ot 判断文件 1 是否比文件 2 旧 test 文件1 -ot 文件2 -nt 判断文件 1 是否比文件 2 新 test 文件1 -nt 文件2
用于检查文件类型和属性。
等价写法:test 条件和[ 条件 ]是等价的,用于检查文件类型和比较数值。
九、流程控制语句
基础 if 结构
if 测试语句 then 语句1 fi
if-else 结构
if 测试语句 then 语句1 else 语句2 fi
if-elif-else 结构
if 测试语句1 then 语句1 elif 测试语句2 then 语句2 else 语句3 fi
while语句结构(条件满足进入循环)
while 测试语句 do 代码 done
until语句结构(条件满足退出循环)
until 测试语句 do 代码 done
for语句结构
for 变量 in 参数(列表)
do
代码
done
示例:
for a in {100..90} do echo $a donefor a in `ls` do if test -f $a//判断是否是文件 then echo $a fi if test -d $a//判断是否是目录 then echo $a!!! fi echo $a done