一、echo命令
-
1.1、显示普通字符串
#!/bin/bash echo "iPhoneX 标配 8388"
-
1.2、显示转义字符
#!/bin/bash echo " " iPhoneX 顶配 9688 " "
-
1.3、显示变量
#!/bin/bash iphone="iPhoneX" echo "${iphone} 9688"
-
1.4、显示换行
#!/bin/bash # 错误写法 echo "iPhoneX \n hello未来" # 正确写法(-e:表示开启转义功能) echo -e "iPhoneX \n hello未来"
-
1.5、不换行:打印结果是:
iPhoneX hello未来 科技
# 注意:"-e"开启转义功能,"\c"表示不换行 #!/bin/bash echo -e "iPhoneX hello未来 \c " echo "科技"
-
1.6、显示一个执行命令:执行结果:
2019年 6月 9日 星期日 16时29分24秒 CST
# 要求:输出当前时间,还有很多命令,后面学习一些 #!/bin/bash echo `date`
提示:date两边的是 斜着的符号
-
1.7、退出命令
语法:exit 状态->退出程序-
写法一
#!/bin/bash iphone="404报错童鞋,买了一台iPhoneX,非常不好,出bug" echo ${iphone} exit echo "你完蛋了,买了假货"
-
写法二
#!/bin/bash iphone="404找不到错误" echo ${iphone} exit 0 age=100 if(age > 100){ exit 1 }
退出的状态码
-
二:Shell脚本语言-数组
2.1、语法:数组名=(值一,值二,值三)
-
2.2、初始化数组:
方式一:打印结果:老大
#!/bin/bash name=("老大" "刘二" "王三" "李四") #输出 echo $name #默认:打印第一个元素
方式二:打印结果:
老大 刘二
#!/bin/bash name=() name[0]="老大" name[1]="刘二" name[2]="王三" name[3]="李四" echo ${name[0]} ${name[1]}
-
2.3、读取数组
语法结构:${数组名[下标]}
#!/bin/bash name=("老大" "刘二" "王三" "李四") #输出一个元素 echo ${name[0]} #输出所有->"@"表示输出所有的数据 echo ${name[@]}
"@"表示输出所有的数据
-
2.4、数组长度
-
方式一:获取数组元素个数,打印结果:4
语法:${#数组名[@]}
#!/bin/bash name=("老大" "刘二" "王三" "李四") echo ${#name[@]}
-
方式二:获取数组元素个数,打印结果:4
语法:${#数组名[*]}
name=("老大" "刘二" "王三" "李四") echo ${#name[*]}
-
方式三:获取单个元素->字符长度,打印结果:2
语法:${#数组名[下标]}
name=("老大" "刘二" "王三" "李四") echo ${#name[0]}
-
三:Shell脚本语言-传递参数
-
3.1、语法定义?
./文件名称.sh 参数1 参数2 参数3...
-
3.2、案例,脚本内容如下:
#${0}->表示文件名称 #${1}->表示参数1 #${2}->表示参数2 echo ${0} ${1} ${2}
执行脚本代码:
./hello.sh "哈哈" "嘿嘿"
-
3.3、特殊字符
-
<1>、
$#
:获得脚本输入参数个数,脚本内容如下:echo ${#}
执行脚本代码:
./hello.sh "逗你玩" "饿到爆"
执行脚本结果:2
-
<2>、
$*
:显示整个脚本输入参数列表,脚本内容如下:echo ${*}
执行脚本代码:
./hello.sh "逗你玩" "饿到爆"
执行脚本结果:"逗你玩" "饿到爆"
-
四:Shell脚本语言-基本运算符
-
4.1、算数运算符
-
<1>、
+
加运算,注意:expr
规定命令,结果是10
a=1 b=9 c=`expr $a + $b` echo "c的值:$c"
-
<2>、
-
减运算,注意:expr
规定命令,结果是6
a=8 b=2 c=`expr $a - $b` echo "c的值:$c"
-
<3>、
*
乘运算,注意:expr
规定命令,注意:*
要加一个转义符号\
,结果是18
a=2 b=9 c=`expr $a \* $b` echo "c的值:$c"
-
<4>、
/
除运算,注意:expr
规定命令,结果是4
a=8 b=2 c=`expr $a / $b` echo "c的值:$c"
-
<5>、
%
求余运算,注意:expr
规定命令,结果是2
a=8 b=3 c=`expr $a % $b` echo "c的值:$c"
-
<6>、
=
赋值运算,注意:expr
规定命令,结果是8
a=8 b=$a echo "b的值:$b"
-
<7>、
==
等于判断运算,注意:expr
规定命令,结果是:a不等于b
a=8 b=9 if [ $a == $b ] then echo "a等于b" else echo "a不等于b" fi
-
-
4.2、关系运算符
-
<1>、
-eq
(equal:相等):检测两个数是否相等,当等返回true,结果是:a不等于ba=100 b=200 if [ $a -eq $b ] then echo "a等于b" else echo "a不等于b" fi
-
<2>、
-ne
(not equal:不等):检测两个数是否相等,不相等返回 true,结果是:a不等于ba=100 b=200 if [ $a -ne $b ] then echo "a不等于b" else echo "a等于b" fi
-
<3>、
-gt
(greater than:大于):检测左边数是否大于右边数,如果是,返回true,结果是:a小于ba=100 b=200 if [ $a -gt $b ] then echo "a大于b" else echo "a小于b" fi
-
<4>、
-lt
(less than:小于):检测左边数是否小于右边数,如果是,返回true,结果是:a小于ba=100 b=200 if [ $a -lt $b ] then echo "a小于b" else echo "a大于b" fi
-
<5>、
-ge
(greater than or equal:大于或等于):检测左边数是否(大于+等于)右边数,如果是,返回true,结果是:a小于ba=100 b=200 if [ $a -ge $b ] then echo "a大于等于b" else echo "a小于b" fi
-
<6>、
-le
(less than or equal:小于或等于):检测左边数是否(小于+等于)右边数,如果是,返回true,结果是:a小于等于ba=100 b=200 if [ $a -le $b ] then echo "a小于等于b" else echo "a大于b" fi
-
-
4.3、布尔运算符
-
<1>
!
:非运算,表达式为true,返回true,否则返回falsea=100 b=200 if [ $a != $b ] then echo "a不等于b" fi
-
<2> 、
-o
:或运算,有一个表达式为true,则返回truea=100 b=200 if [ $a -lt 200 -o $b -gt 200 ] then echo "成立" fi
-
<3> 、
-a
:与运算,两个表达式为true,则返回true,结果不成立a=100 b=200 if [ $a -lt 200 -a $b -gt 200 ] then echo "成立" else echo "不成立" fi
-
-
4.4、逻辑运算符
-
<1> 、
&&
:逻辑且->and,结果:不成立a=100 b=200 if [ $a -lt 200 ] && [ $b -gt 200 ] then echo "成立" else echo "不成立" fi
-
<2> 、
||
:逻辑 OR,结果:成立a=100 b=200 if [ $a -lt 200 ] || [ $b -gt 200 ] then echo "成立" else echo "不成立" fi
-
-
4.5、字符串运算
-
<1>、
=
:检测两个字符串是否相等,如果相等返回truea="HR" b="iOS" if [ $a = $b ] then echo "字符串a等于字符串b" else echo "字符串a不等于字符串b" fi
-
<2>、
!=
:检测两个字符串是否相等,如果不相等返回truea="HR" b="iOS" if [ $a != $b ] then echo "字符串a不等于字符串b" else echo "字符串a等于字符串b" fi
-
<3>、
-z
:检测字符串长度是否为0,如果是返回true,结果:a不存在值a="iOS" if [ -z $a ] then echo "a为空,不存在值" else echo "a存在值" fi
-
<4>、
-n
:检测字符串长度是否为0,如果不是0,返回truea="iOS" if [ -n "$a" ] then echo "a存在" else echo "a不存在值" fi
提示:在使用
-n
的时候, 变量a要这样写"$a"
-
<5>、
字符串
:检测字符串是否为空,不为空返回truea="JAR" if [ $a ] then echo "a不为空" else echo "a为空" fi
-
-
4.6、文件测试运算符:
file="/Users/wangchong/Desktop/opencv知识/array.sh"
-
<1>、
-d file
:检测文件是不是一个目录,如果是,那么返回true,结果是:不是一个目录if [ -d $file ] then echo "是一个目录" else echo "不是一个目录" fi
-
<2>、
-r file
:检测文件是否可读,如果是,那么返回trueif [ -r $file ] then echo "可读" else echo "不可读" fi
-
<3>、
-w file
:检测文件是否可写,如果是,那么返回trueif [ -w $file ] then echo "可写" else echo "不可写" fi
-
<4>、
-x file
:检测文件是否是可执行文件,如果是,那么返回trueif [ -x $file ] then echo "可执行" else echo "不可执行" fi
-
<5>、
-f file
:检测文件是否是一个普通文件(既不是目录,也不是设备文件),如果是,那么返回trueif [ -f $file ] then echo "文件为普通文件" else echo "文件为特殊文件" fi
-
<6>、
-s file
:检测文件是否为空(文件有内容),如果是,那么返回trueif [ -s $file ] then echo "文件有内容" else echo "文件没有内容" fi
-
<7>、
-e file
:检测文件是否存在(包含了:目录和文件),如果是,那么返回trueif [ -e $file ] then echo "存在" else echo "不存在" fi
-
五、Shell脚本语言-流程控制
-
5.1、"if"语句,提示:
fi
代表结束语法结构
if [条件] then 代码 fi
代码结构
a="iOS" b="HR" if [ $a = $b ] then echo "字符串a等于字符串b" fi
-
5.2、"if else"语句
语法结构
if [条件] then 代码 else 代码 fi
代码结构
a="iOS" b="HR" if [ $a = $b ] then echo "字符串a等于字符串b" else echo "字符串a不等于字符串b" fi
-
5.3、"if-else-if-else"
语法结构
if [条件] then 代码 elif [条件] then 代码 else 代码 fi
代码结构
a="iOS" b="HR" if [ $a = $b ] then echo "字符串a等于字符串b" elif [ $a ] then echo "字符串a不为空" else echo "字符串a不等于字符串b" fi
-
5.4、"for"循环语句
语法结构
for 变量名 in item1 item2 item3 … do 代码 done
代码案例一
for name in "a" "b" "c" "d" do echo ${name} done
代码案例二 (特殊的字符必须进行转义)
for name in "I don\`t know" do echo ${name} done
代码案例三 :从变量读取列表
value="I don\`t know" for name in ${value} do echo ${name} done
代码案例四 :读取目录->通配符
file="/Users/wangchong/Desktop/*" for name in ${file} do echo ${name} done
代码案例五 :嵌套循环(类似于C语言写法)
for ((a=1;a < 7; a++)) do echo ${a} done
-
5.5、"while"循环
语法结构
while(条件) do 代码 done
代码案例一
a=1 while(($a<10)) do echo ${a} a=`expr $a + 1` done
代码案例二:无限循环
a=1 while : do echo "hello" done
代码案例三:无限循环
for((::)) do echo "hello" done
-
5.6、"case"语句
语法结构
case 值 in 模式1) 代码 ;; 模式2) 代码 ;; 模式3) 代码 ;; sac
代码案例一
number=1 case $number in 1) echo "等于1" ;; 2) echo "等于2" ;; 3) echo "等于3" ;; esac
-
5.7、until循环:不满足条件才会进入 until,与while的用法相反
语法结构until 条件 do 逻辑代码 done
代码案例一
i=1 until (($i > 1)) do echo "i小于等于1" done
-
5.8、跳出循环:break
-
<1>、跳出单个循环
for ((i=0;i<10;i++)) do echo "i的值是 $[i]" if [ $i -eq 5 ] then echo "退出循环" break fi done
-
<2>、跳出内部循环
for ((i=0;i<10;i++)) do echo "i的值是 $[i]" for ((j=0;j<10;j++)) do echo "j的值是 $[j]" if [ $j -eq 5 ] then echo "退出内层循环,i的值:$[i],j的值:$[j]" break fi done done
提示:
break
与break 1
一个意思, 代表跳出1层循环 -
<3>、跳出外部循环
for ((i=0;i<10;i++)) do echo "i的值是 $[i]" for ((j=0;j<10;j++)) do echo "j的值是 $[j]" if [ $j -eq 5 ] then echo "退出内层循环,i的值:$[i],j的值:$[j]" break 2 fi done done
提示:
break 2
代表退出2
层循环
-
-
5.9、结束当前的循环:continue
for ((i=0;i<5;i++)) do if [ $i -eq 3 ] then echo "结束当前循环的值 i=$[i]" continue fi echo "i的值是 $[i]" done
打印结果是:
i的值是 0 i的值是 1 i的值是 2 结束当前循环的值 i=3 i的值是 4