shell脚本学习笔记
0、赋值变量时等号两边不能有空格,做运算时运算符两侧必须要有空格。
1、readonly 变量名
将变量设置为只读变量,如:
name="gnib" readonly name
2、unset 变量名
删除变量,如:
name="gnib" unset name
3、字符串既可以使用双引号也可以使用单引号,但是单引号有限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中转义字符无效。
4、字符串拼接
your_name="qinjx" greeting="hello, "$your_name" !"#双引号外拼接 greeting_1="hello, ${your_name} !"#双引号内拼接 echo $greeting $greeting_1
5、#:大括号内的‘#’字符,用于表示结算长度,例如:
string="abcd" echo ${#string} #输出 4 my_array=(A B "C" D) echo "数组元素个数为: ${#my_array[*]}" #输出4 echo "数组元素个数为: ${#my_array[@]}"#输出4 echo "数组单个元素的长度为: ${#my_array[0]}"#输出1 #补充 echo "数组元素个数为: ${my_array[*]}" #输出数组所有元素 echo "数组元素个数为: ${my_array[@]}"#输出数组所有元素
6、字符串分片(提取子串)
string="runoob is a great site" echo ${string:1:4} # 表示从下标1开始,输出4个字符。输出 unoo
7、查找子串
string="runoob is a great company" echo `expr index "$string" is` # 输出 8
8、作乘法运算时, * 号需要转义
val=`expr $a \* $b`
9、布尔运算符 -a -o 与逻辑运算符 || && 的使用
a=10 b=20 if [ $a -lt 100 -o $b -gt 100 ] then echo "$a 小于 100 或 $b 大于 100 : 返回 true" else echo "$a 小于 100 或 $b 大于 100 : 返回 false" fi if [ $a -lt 5 -o $b -gt 100 ] then echo "$a 小于 5 或 $b 大于 100 : 返回 true" else echo "$a 小于 5 或 $b 大于 100 : 返回 false" fi if [[ $a -lt 100 && $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi if [[ $a -lt 100 || $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi
10、字符串运算符
= | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 检测两个字符串是否相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] 返回 false。 |
-n | 检测字符串长度是否为0,不为0返回 true。 | [ -n $a ] 返回 true。 |
str | 检测字符串是否为空,不为空返回 true。 | [ $a ] 返回 true。 |
a="abc" if [ $a ] then echo "字符串不为空" else echo "字符串为空" fi #字符串不为空
11、read 命令
read 命令一个一个词组地接收输入的参数,每个词组需要使用空格进行分隔;如果输入的词组个数大于需要的参数个数,则多出的词组将被作为整体为最后一个参数接收。
read firstStr secondStr echo "第一个参数:$firstStr; 第二个参数:$secondStr" #输入 一 二 三 四 #输出 第一个参数:一; 第二个参数:二 三 四 read -p "请输入一段文字:" -n 6 -t 5 -s password echo "\npassword is $password" #输出 请输入一段文字: password is asdf