if语句语法格式
if condition
then
command1
command2
…
fi
写成一行(适用于终端命令提示符):
if [ $(ps -ef | grep -c “ssh”) -gt 1 ]; then echo “true”; fi
if else 语法格式
if condition
then
command1
command2
…
else
command
fi
if else-if else语法格式
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
以下实例判断两个变量是否相等:
a=10
b=20
if [ $a == $b ]
then
echo “a等于b”
elif [ $a -gt $b ]
then
echo “a大于b”
elif [ $a -lt
b
]
t
h
e
n
e
c
h
o
"
a
小
于
b
"
e
l
s
e
e
c
h
o
"
没
有
符
合
的
条
件
"
f
i
输
出
结
果
:
a
小
于
b
∗
∗
f
o
r
循
环
∗
∗
f
o
r
v
a
r
i
n
i
t
e
m
1
i
t
e
m
2...
d
o
c
o
m
m
a
n
d
1
c
o
m
m
a
n
d
2...
d
o
n
e
写
成
一
行
f
o
r
v
a
r
i
n
i
t
e
m
1
i
t
e
m
2...
;
d
o
c
o
m
m
a
n
d
1
;
d
o
n
e
;
实
例
:
f
o
r
l
o
o
p
i
n
1234
;
d
o
e
c
h
o
"
t
h
e
v
a
l
u
e
i
s
:
b ] then echo "a小于b" else echo "没有符合的条件" fi 输出结果: a小于b **for循环** for var in item1 item2 ... do command1 command2 ... done 写成一行 for var in item1 item2 ...; do command1; done; 实例:for loop in 1 2 3 4; do echo "the value is:
b]thenecho"a小于b"elseecho"没有符合的条件"fi输出结果:a小于b∗∗for循环∗∗forvarinitem1item2...docommand1command2...done写成一行forvarinitem1item2...;docommand1;done;实例:forloopin1234;doecho"thevalueis:loop"; done;
输出结果:
the value is:1
the value is:2
the value is:3
the value is:4
顺序输出字符串中的字符:
for str in this is dog;do echo $str;done
输出结果:
this
is
dog
while语句
while 循环用于不断执行一系列命令,也用于从输入文件中读取数据。其语法格式为:
while condition
do
command
done
以下是一个基本的 while 循环,测试条件是:如果 int 小于等于 5,那么条件返回真。int 从 1 开始,每次循环处理时,int 加 1。运行上述脚本,返回数字 1 到 5,然后终止。
int=1
while(( $int<=5 ))
do
echo $int
let “int++”
done
输出结果:
1
2
3
4
5
以上实例使用了 Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量,具体可查阅:Bash let 命令。
until循环
until 循环执行一系列命令直至条件为 true 时停止。
until 循环与 while 循环在处理方式上刚好相反。
一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。
until 语法格式:
until condition
do
command
done
condition 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。
以下实例我们使用 until 命令来输出 0 ~ 9 的数字:
a=0
until [ ! $a -lt 10 ]
do
echo $sa
a=expr $a + 1
done
输出结果:
0
1
2
3
4
5
6
7
8
9
case-esac
case-esac 为多选择语句,与其他语言中的 switch-case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case-esac 语句,esac(就是 case 反过来)作为结束标记。
可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
case 值 in
模式1)
command1
command2
…
commandN
;;
模式2)
command1
command2
…
commandN
;;
esac
实例:
echo ‘输入1到3之间的数字:’
echo ‘你输入的数字为:’
read num
case $num in
- echo ‘你选择了1’
;; - echo ‘你选择了2’
;; - echo ‘你选择了3’
;;
*) echo ‘你没有输入1到4之间的数字’
;;
esac
输入不同的内容,会有不同的结果,例如:
输入 1 到 4 之间的数字:
你输入的数字为:
3
你选择了 3
匹配字符串:
site=“baidu”
case “$site” in
“baidu”) echo “百度”
;;
“ali”) echo “阿里”
;;
“tenxun”) echo “腾讯”
;;
esac
输出结果:百度
跳出循环
在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue。
1.break命令
while :
do
echo -n “输入1到5之间数字:”
read num
case $num in
1|2|3|4|5) echo “你输入数字为 $num”
;;
*) echo “你输入的数字不是1到5”
break
;;
esac
done
输出结果为:
输入1到5之间数字:2
你输入数字为 2
输入1到5之间数字:6
你输入的数字不是1到5
2.continue
continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。
实例:
while :
do
echo -n “输入1到5之间数字:”
read num
case $num in
1|2|3|4|5) echo “你输入数字为 $num”
;;
*) echo “你输入的数字不是1到5”
continue
echo “游戏结束”
;;
esac
done
运行代码发现,当输入大于5的数字时,该例中的循环不会结束,语句 echo “游戏结束” 永远不会被执行。