Shell 学习笔记(三)
条件语句
if
if 语句语法格式:
if condition
then
command1
command2
...
commandN
fi
写成一行(适用于终端命令提示符):
if [ 10 -gt 1 ]; then echo "true"; fi
if else
if else 语法格式:
if condition
then
command1
command2
...
commandN
else
command
fi
if else-if else
if else-if else 语法格式:
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
if else 实例
a=10
b=20
if [ $a -lt $b ]
then
echo "a 小于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
elif [ $a == $b ]
then
echo "a 等于 b"
else
echo "没有符合的条件"
fi
#判断顺序执行,如有满足条件的,下面的判断不再继续。
>>输出结果
a 小于 b
case … esac
case … esac 为多选择语句,与其他语言中的 switch … case 语句类似,是一种多分支选择结构,每个 case 分支用右圆括号开始,用两个分号(;;)表示 break,即执行结束,跳出整个 case … esac 语句,esac(就是 case 反过来)作为结束标记。
可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
case 的取值后面必须为单词 in,每一模式必须以右括号结束。取值可以为变量或常数,匹配发现取值符合某一模式后,其间直至遇见两个分号(;;)。
取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
# case ... esac 语法格式如下:
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
case … esac 实例
aNum=3
case $aNum in
1) echo '星期一'
;;
2) echo '星期二'
;;
3) echo '星期三'
;;
4) echo '星期四'
;;
5) echo '星期五'
;;
*) echo '玩去吧!!!'
;;
esac
>>输出结果
星期三
site="baidu"
case "$site" in
"google") echo "Google 搜索"
;;
"taobao") echo "淘宝网"
;;
"baidu") echo "百度"
;;
esac
>>输出结果
百度
test 命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
作用相当于代替了 方括号
if test 10 -eq 20
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
>>输出结果
两个数不相等!
if test "abcd" = "asdd"
then
echo '两个字符串相等!'
else
echo '两个字符串不相等!'
fi
>>输出结果
两个字符串不相等!
循环
for 循环
#顺序输出当前列表中的数字:(下面代码可以写成 for loop in {1..5})
for loop in 1 2 3 4 5
do
echo $loop
done
echo ================
# 顺序输出字符串中的字符:
for str in This is a string
do
echo $str
done
>>输出结果
1
2
3
4
5
================
This
is
a
string
while 循环
a=1
while(( $a<=5 ))
do
let "a++"
echo $a
done
echo "改变加加的位置"
b=1
while(( $b<=5 ))
do
echo $b
let "b++"
done
>>输出结果
2
3
4
5
6
改变加加的位置
1
2
3
4
5
while 循环读取键盘信息
下面的例子中,输入信息被设置为变量FILM,按结束循环。
echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的网站名: '
while read FILM
do
echo "是的!$FILM 是一个好网站"
done
在键盘输入 asdqwe 后,输出结果如下
按下 <CTRL-D> 退出
输入你最喜欢的网站名: sdasdqwew
是的!asdqwe 是一个好网站
until 循环
until 循环执行一系列命令直至条件为 true 时停止。
until 循环与 while 循环在处理方式上刚好相反。
一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。
# until 语法格式:
# condition 指条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。
until condition
do
command
done
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
>>输出结果
0
1
2
3
4
5
6
7
8
9
case … esac
在这里插入代码片
无限循环(了解)
无限循环语法格式:
while :
do
command
done
# 或者
while true
do
command
done
# 或者
for (( ; ; ))
跳出循环
break命令
break命令允许跳出所有循环(终止执行后面的所有循环)。
for a in {1..10}
do
if [ $a == 8 ]
then
break
fi
echo $a
done
输出结果
1
2
3
4
5
6
7
continue
continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。
for a in {1..10}
do
if [ $a == 8 ]
then
continue
fi
echo $a
done
输出结果
1
2
3
4
5
6
7
9
10