3、特殊的值(通配符号的使用)
* 任意多个字符
? 一个字符 ff=c???.sh匹配c开头后面有三个字符的.sh文件
[] ff=[024]*.sh匹配0,2,4开头.sh结尾的任意文件
[^] ff=[^024]*.sh匹配不是0,2,4开头.sh结尾的任意文件
匹配文件名,匹配成功,显示文件名,匹配不成功显示原字符
4、命令替换赋值
$(命令) b=$(date+%Y)
`命令` c=`date+%y`
5、表达式替换
6、标准输入赋值
read -p 提示-t 时间 -n个数 变量 read -p 请输入:-t 10 -n 5 e 输入的时间超过10秒自动返回,长度能超过5个
【运算符号与变量相关操作】
1、变量运算的语法
$((算术表达式1,表达式2…)) C支持的全支持,还 **支持小数运算,赋值永远是最后一个表达式和寄存器中的值
((运算表达式1,运算表达式2…)) ((c=a+b)) \
let 元算表达式 letb=a+b / 效果相同
2、shell语法支持的运算符号
参考man bash手册帮助文档
3、字符串运算
${} 取值
${变量:-值} echo${a:-killer}如果变量a为null,则返回-后面的值killer,如果a不为空则返回a的值
${变量:+值} echo${a:+killer}如果变量a为null,则返回null,不为null,则返回+后面的值
${变量:=值} echo${a:=killer}如果变量a为null,则把=后面的值kill赋值为a再返回a的值,不为空则返回a的值
${变量:?值} echo${a:?killer}如果变量a为null,则以?后面的值错误方式显示,变量不为null,则直接返回变量
${变量:位置} echo ${d:3}输出第3-1个位置后面的字符串,包括第3-1个字符 位置是包含关系
${变量:位置:长度} echo ${d:3:5}输出第3-1个位置的后面5个字符串,包括第3-1个字符 位置从零开始算
${!前缀*} echo${!a*}返回以a开头所以的变量名,输出的是变量名字 等同与${!前缀@}
${!数组名[*]} 打印数所以下标等同于${!数组名[@]}
${#变量名} 输出变量长度
${变量#word} 返回word开始匹配以后的字符串 等同于${变量##word}
${变量%word} 去掉字符串指定的开始与结束的某字符
${变量/匹配字符串 /string} 只替换第一个echo ${g/mao/killer}在变量g中寻找mao第一个相同字符并用keller替换之
${变量//匹配字符串/string} 替换所以echo ${g//mao/killer}在变量g中寻找mao所有相同的字符并用keller替换之
4、数组
声明:数组名[下标]=值 a[1]=20 a[2]=30
declare -a 数组名 declare -a b=(1 2 3 4)
数组名=(值1 值2 …值n) c=(hellword how do you do)
使用:${数组[下标]} echo ${c[1]}
注意:shell中数组下标可以不连续
【测试运算】 [ 0为真,非0即1为假 ]
1、字符串测试
test A string B 判断指定的字符串是否为空
[] string1=string2 判断两个字符串string1和string2是否相等
string1!=string2 判断两个字符串string1和string2是否不相等
-n string 判断string是否是非空串
-z string 判断string是否是空串
2、整数测试
test A -eq B 是否相等=
[ ] -ne 是否不相等!=
-gt 是否大于>
-lt 是否小于<
-ge 是否大于等于>=
-le 是否小于等于<=
3、文件测试
test -a file 文件是否存在
[ ] -b 文件是否以块文件存在
-c 文件是否以字符文件存在
-e 同-a的操作
-s 文件长度是否大于0或者文件为非空文件
-L 文件是否存在且为符号连接
-u 文件是否设置了suid位
-d 文件是否以目录存在
-f 文件存在且为常规文件
-r 文件是否存在且可读
-w 文件是否存在且可写
-x 文件是否存在且可执行
逻辑操作符
test ! A 非
[ ] A -a B 与
-o 或
注意:$ [ _"$a"_= _"$b" _] test "$a"_!=_"$b"
当进行条件测试时下划线_处必须都是空格
【流程控制】
1、if语句
if 条件测试
then
语句
/* elif 条件测试
then
语句
else
语句 */可选
fi
掌握重点:条件测试
条件测试1: 命令的执行结果
条件测试2:算术关系表达式
条件测试3:逻辑测试
[ ] -a 表示逻辑and -o 表示逻辑or
[[ ]] -a 表示文件存在测试 -o 选项测试
2、case语句
case A in //A变量
value1)
语句1
语句n;; //;;表示当前value结束
value n)
语句1
语句n;;
*) //以上都不是则
语句1
语句n;;
esac