Shell编程
Shell是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
流程控制
shell编程的流程控制有:if-else语句、for循环、while语句、无限循环、until循环、case … esac、跳出循环。
if-else语句
if 语句:
#!/bin/sh
#if 控制语句#if 语句语法格式
# if command;
# then
# code
# fiif [ `ps -ef | grep -c "ssh"` -gt 1 ];
thenecho "true"
fi
--------------
true
if else 语法格式:
#else格式# if command;
# then
# code
# else
# code
# fi
if ((10>20))
thenecho "10是大于20的"
elseecho "10不大于20"
fi
------------------
10不大于20
elif语法
# elif格式
# if command;
# then
# code
# elif command2
# then
# code
# *n
# else
# code
# fia=10
b=20
if [ $a -eq $b ];
thenecho "a=b"
elif [ $a -gt $b ]
thenecho "a>b"
elif [ $a -lt $b ]
thenecho "a<b"
fi
---------------
a<b
循环
for循环
与其他编程语言类似,Shell支持for循环。
for循环一般格式为:
for循环
for i in xxx;
docode
done
顺序输出字符串中的字符:
for i in I\'m good at coding;
doecho $i
done
------------
I'm
good
at
coding
顺序输出当前列表中的数字:
for loop in 1 2 3 4 5;
doecho $loop
done
---------
1
2
3
4
5
while循环
while 循环用于不断执行一系列命令,也用于从输入文件中读取数据。其语法格式为:
#while循环
while condition
docode
done
int=1
while [ $int -le 5 ];
doecho $intlet "int++"
done
---------
1
2
3
4
5
死循环
# 死循环
echo "请按ctrl+d结束"
echo -n "请输入你喜欢的电影:"
while read film;
doecho "${film}是好电影"
done
=========================
#或
while :
doecho "im handsome"
done
until循环
格式:
# until 循环 直到条件为真为止
until condition
docommand
done
a=0
until [ ! $a -lt 10 ]
doecho $aa=`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,每一模式必须以右括号结束。取值可以为变量或常数,匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。
取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
#!/bin/sh
# case esac
echo "请输入1-4之间的数字"
read -p "请输入你的数字" num
case $num in1)echo "you choose 1";;2)echo "you choose 2";;3)echo "you choose 3";;4)echo "you choose 4";;*)echo "you choose others";;
esac
匹配字符串:
vol="hhh"
case $vol in "hhh")echo "you are hhhhhh";;"xxx")echo "you are xxxxxx";;"www")echo "you are wwwwww";;
esac
跳出循环
在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell 使用两个命令来实现该功能:break 和 continuebreak 命令
- break 命令允许跳出所有循环(终止执行后面的所有循环)。
- continue 命令与 break 命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。
echo "welcome to Amusement park"
echo "please inter a number between 1-4"
while :
doread -p "please inter your number: " numcase $num in1|2|3|4)echo "you choose 1-4 you are great";;*)echo "you choose others you are bad"break;;esac
done
总结
本篇介绍了shell编程的流程控制:
- if-else语句
- 循环:
- for循环:遍历循环
- while循环:符合条件循环
- 死循环:一直循环
- until循环:一直循环知道符合条件为止
- case … esac:模式匹配
- 跳出循环:
- break:跳出所有循环。
- continue:跳出当前循环。