接上篇学习笔记,这次主要总结参数 传递 运算符 循环 相关
传递参数
执行脚本的时候,可以向脚本传递参数,脚本内获取参数的格式为:n。 n代表一个数字, 1 为执行脚本的第一个参数, 2 为执行脚本的第二个参数….. 但是参数过多,如10,就要用{}括起来,{10}
举个例子:
先创建一个脚本try.sh,内容如下
#!/bin/bash
#try
echo "脚本名:$0"
echo "第一个参数: $1"
echo "第二个参数:$2"
echo "第十个参数:$10"
echo "第十个参数:${10}"
echo "参数总数: $#"
echo "参数全部输出: $*"
echo "参数全部输出: $@"
运行
bash ./try.sh 1 2 3 4 5 6 7 8 9 aa 11
脚本名:./try.sh
第一个参数: 1
第二个参数:2
第十个参数:10 ----这边未加{},所以认为 $1 后面加 0
第十个参数:aa ----正确结果
参数总数: 11
参数全部输出: 1 2 3 4 5 6 7 8 9 aa 11 同"1 2 3 4 5 6 7 8 9 aa 11"
参数全部输出: 1 2 3 4 5 6 7 8 9 aa 11 同"1" "2" "3" ......"aa" "11"
运算符
算数运算符
a=10;b=20
[ $a == $b ];echo $? ----1 中间有空格; $? 标识上一步的结果,如果0正确,其他数字都是错误
[ $a != $b ];echo $? ----0
c=`expr $a + $b`;echo $c ---30
d=`expr $a \* %b`;echo $c ---200 乘法要用\标识一下
关系运算符
主要包括以下几种:
ge 大于等于
eq 等于
ne 不等于
gt 大于
lt 小于
le 小于等于
-a 逻辑与 等价于 &&
-0 逻辑或 等价于 ||
[ $a -eq $b ];echo $? ----1 等于
[ $a -lt $b ];echo $? ----0 小于
[ $a -gt $b ];echo $? ----1 大于
[ $a -ne $b ];echo $? ----0 不等于
[ $a -le $b -a $a -eq $b ];echo $? --- 1 小于等于且等于
[ $a -le $b -a $a -eq $b ];echo $? --- 0 小于等于或等于
字符串运算符
主要包括以下几种:
-z 检测字符串长度是否为0,为0返回 true
-n 检测字符串长度是否为0,不为0返回true
[ str ] 检测字符串是否为空,不为空返回true
a="hello shell"
[ -n "$a" ];echo $? --- 0 不为0,返回true
[ -z "$a" ];echo $? --- 1 不为0,返回false
[ "$a" ];echo $? --- 0 字符串不为空,返回true
if [ "$str" ];
then
echo "不是空";
else
echo "空字符串";
fi -----不是空
文件测试运算符
主要包括一下几种:
-e 检测文件是否存在,存在返回true
-d 检测是否是目录,是返回true
-f 检测是否是普通文件,是返回true
-r 检测文件是否可读,如果是,则返回 true
-w 检测文件是否可写,如果是,则返回 true
-x 检测文件是否可执行,如果是,则返回 true
d='/d/awk.txt' [ -f $d ];echo $? ----0 d是文件,正确返回 0 [ -e $d ];echo $? ----0 文件存在,正确返回 0 [ -d $d ];echo $? ----1 是文件不是文件夹,错误返回 1 [ -r $d ];echo $? ----0 可读文件,返回 0 [ -w $d ];echo $? ----0 可读文件,返回 0
循环
if – then – else
d='/d/awk.txt'
if [-e $d ] ---- 文件存在,所以 file exist
then
echo file exist
else
echo file not exist
fi
if [ -d $d ] ---- file
then
echo not dir
elif [ -f $d ]
echo file
else
echo over
fi
for 循环
遍历数组 a=(1 2 3 4 5 6) for i in ${a[*]} do echo ${i} done ---- 1 2 3 4 5 6 遍历文件夹 for file in `ls` do echo $file done 2.20/ 2.22/ 2.23/ 2.26/
while 循环
a=0 while [[ $a -lt 5 ]]; ----0 1 2 3 4 do echo ${a} a=`expr $a + 1` done 配合break a 为2的时候 a=0 while [[ $a -lt 5 ]]; ----0 1 2 do echo ${a} if [[ $a -eq 2 ]] break else a=`expr $a + 1` done 配合continue a=0 while [[ $a -lt 5 ]]; ----0 do echo ${a} if [[ $a -eq 2 ]] continue else a=`expr $a + 1` break done