1.if else-if else判断
if else-if else在shell中,格式同Java中还是有点区别的。具体格式是啥也就不说了,直接上demo,一看就知道了
#!/bin/bash
a=16 b=15
#1.if-else判断(使用[ ]来实现)
if [ ${a} -eq ${b} ]
then
echo "a等于b"
else
echo "a不等于b"
fi
#2.if else-if else判断(使用test来实现)
if test ${a} -gt 100
then
echo "a大于100"
elif test ${a} -le ${b}
then
echo "a小于等于b"
else
echo "两个条件都不满足"
fi
#################################
区别:1.shell中写法有所变法,是:elif
2.shell中if,if else,if elif else结束时,都必须加fi来确认循环结束(末尾的fi就是if倒过来拼写)
3.写成一行的话,需要加分号;隔开.
eg:if [ ${a} -eq ${b} ];then echo "a等于b";else echo "a不等于b";fi
2.for循环
#!/bin/bash
#4.for循环
city_arr=("Beijing" "Shanghai" "Guangzhou" "Shenzhen" "Taiyuan")
for city in ${city_arr[@]}
do
echo ${city}
done
#来回顾一下接受参数$*,加引号的区别。参考:https://blog.csdn.net/lzb348110175/article/details/89972807
for str in "$*"
do
echo ${str}
done
#来回顾一下接受参数$@,加引号的区别。参考:https://blog.csdn.net/lzb348110175/article/details/89972807
for str in "$@"
do
echo ${str}
done
#################################
注意:1.要使用do,done等关键字
2.一行来写for循环
eg:for city in ${city_arr[@]};do echo ${city};done;
结果如下:
3.while语句
#!/bin/bash
#6.while语句
a=15
while test ${a}<50
do
echo ${a}
let "a++"
done;
#######################################
注意:1.while紧跟的条件需要使用双括号(()),中括号或者双中括号无效
2.也是用到do,done关键字
3.此例中使用了Bash的let命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量
4.let命令,可参考:https://www.runoob.com/linux/linux-comm-let.html
*****while循环可用于读取键盘信息(read关键字)
参考:https://www.cnblogs.com/lottu/p/3962921.html
echo -n '输入你最喜欢的网站名: '
while read FILM
do
echo "是的!$FILM 是一个好网站"
done
4.无限循环(3种情形)
#1.while #2.while true #3.for循环
while : while true for (( ; ; ))
do do
command command
done done
5.until循环
until 循环执行一系列命令直至条件为 true 时停止。
until 循环与 while 循环在处理方式上刚好相反。
一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。
#!/bin/bash
#需求:当num<10时,跳出循环
num=15
until test ${num} -lt 10
do
echo "我现在是${num},还大于等于10,,还没跳出循环"
num=`expr ${num} - 1` #等价于:let num--
done;
6.case匹配
Shell case语句为多选择语句,其实与①Java中的switch-case语法 ②sql中的case-when语法的使用一致
通过实例来瞅一瞅case语法
#!/bin/bash
#需求:
# 1.while循环可用于读取键盘信息
# 2.根据输入的信息,然后提示你输入的名字;匹配成功则正常输出,匹配失败,则:提示'你输入了其他名字'
# 3.使用while true死循环
# 4.使用case语法做判断
while true
echo '---------------------------'
echo '请输入你的名字'
read name
do
case ${name} in
'Mary') echo '你输入了Mary'
;;
'Lucy') echo '你输入了Lucy'
;;
'Bob') echo '你输入了Bob'
;;
*) echo '你输入了其他名字'
;;
esac
done
#通过实例,来解析case语法的一些规则:
###1.取值后面必须为单词in
###2.每一模式必须以右括号结束
###3.取值可以为变量或常数
###4.匹配成功执行,直到遇到;;才会结束 ;;相当于Java中的break;
###5.所有都没有匹配到,使用星号 * 捕获该值.相当于Java中的default;
###6.执行完成,需要通过esac来结束(case的反转,与if需要fi来结束类似)
7.跳出循环
shell中跳出循环,用到的也是break和continue两个关键字,两个关键字的用法与在java中的用法一模一样。
break:跳出所有循环
#!/bin/bash
#需求:还是上一个例子,当输入名称不是Mary,Lucy,Bob这三个的时候,在*)中通过break跳出循环
while true
echo '---------------------------'
echo '请输入你的名字'
read name
do
case ${name} in
Mary) echo '你输入了Mary'
;;
Lucy) echo '你输入了Lucy'
;;
Bob) echo '你输入了Bob'
;;
*) echo '你输入了其他名字,执行break跳出,当前循环结束'
break
echo 'break后的语句不会执行'
;;
esac
done
结果:
continue:跳出当前执行的循环
#!/bin/bash
while true
echo '---------------------------'
echo '请输入你的名字'
read name
do
case ${name} in
'Mary') echo '你输入了Mary'
;;
'Lucy') echo '你输入了Lucy'
;;
'Bob') echo '你输入了Bob'
;;
*) echo '你输入了其他名字,执行continue,跳出当前循环'
continue
echo '执行contiune命令后,这条语句不会输出'
;;
esac
done
结果:
结果比较:break直接跳出了整个while true循环,break后面的命令 不会执行
continue只是跳出了当前的case语句,continue后面的命令也不会执行
本文仅用作:学习笔记
部分参考自:https://www.runoob.com/linux/linux-shell-process-control.html
如有错误,欢迎纠正,谢谢