4.4.3Sselect语句
Shell中select语句可以将选项列表做出类似目录的形式,以交互的形式选择列表中的数据,传入select语句中的主体部分加以执行。select语句实际上也是一个循环语句,若不添加break关键字,程序将无法跳出select结构 。select的语法格式如下:
select 变量 in 列表
do
...
[break]
done
#! bin/sh
echo "请输入你要选择的题目"
select subject in "Android" "ios" "java" "C++"
do
echo "您选择了"$subject"这个科目!"
break
done
exit 0;
运行结果:
4.4.4 case语句
case语句可以将一个变 量的内容与多个选项进行匹配,若匹配成功,则执行该条件下对应的语句。语法格式如下:
case var in
选项1) ...;;
选项1) ...;;
选项1) ...;;
...
*)...
esac
#! /bin/sh
echo -e "请输入第一个数:\c"
read a
echo -e "请输入第二个数:\c"
read b
echo -e "请选择运算符号 + - * /:\c"
read var
case $var in
"+") echo "a+b=" `expr $a + $b`;;
"-") echo "a-b=" `expr $a - $b`;;
"*") echo "a*b=" `expr $a * $b`;;
"/") echo "a*b=" `expr $a / $b`;;
*) echo "计算错误!"
esac
exit 0
运行结果:
case语句的匹配条件可以是多个,每个匹配项的多个条件使用"I” 符连接。比如操作系统中常用的"yes" 或"no" 选项,当用户输入"Y"、"y" 或"N"、"n” 等时,系统应可以根据用户的输入给出肯定或否定的操作。示例代码如下:
#!/bin/sh
read var
case $ var in
yes|y|Y) echo "true";;
no|n|N) echo "false";;
*) echo "input error"
esac
exit 0
4.5 Shell中循环语句
循环是编程语言中不可或缺的重要部分,它可以将多次重复运算,凝聚在简短程序中大大减少了代码量。Shell脚本中常 用的循环有: for循环、while循环和until循环。
4.5.1 for循环(列表循环)
其中变量是在当前循环中使用的一个对象,用来接收变量列表中的元素;变量列表是整个循环要操作的对象的集合,可以是字符串集合或文件名、参数等等,变量列表的值会被逐个赋给变量。for循环格式如下:
for 变量 in 列表名
do
...
done
#! /bin/sh
for month in Jan Feb Mar Apr May Jun Jul Agu Sep Oct Nov Dec
do
echo -e "$month\t\c"
done
echo
exit 0
\t :输出一个占位符
\c :输出不换行
4.5.2 while循环
在while循环中,当表达式的值为假时, 停止循环,否则循环将一直进行。 此处表达式外的"[]”表示的是[命令,而非语法格式中的中括号,不能省略。while循环格式如下:
while [表达式]
do
...
done
#!/bin/sh
count=1
sum=0
while [ $count -le 100 ]
do
sum=`expr $sum + $count`
count=`expr $count + 1`
done
echo "sum=$sum"
exit 0
4.5.3 until 循环
until循环与while循环的格式基本相同,不同的是,until循环的条件为假时,才能继续执行循环中的命令。until循环格式如下:
until [ 表达式 ]
do
...
done
#!/bin/sh
#until
i=1
until [ $i -gt 3 ]
do
echo "the number is $i."
i=`expr $i + 1`
done
exit 0
4.6Shell脚本调试
Shell编程中可以通过ShelI提供的一些选项,对脚本文件进行调试,其中常用的调试选项有: -n、-V、 -X ,这些选项的功能分别如下:
-n:不执行脚本,仅检查脚本中的语法问题;
-v:在执行脚本的过程中,将执行过的脚本命令打印到屏幕;
-x:将用到的脚本内容打印到屏幕i
使用-n选项调试下面代码:
#! /bin/sh
echo -e "请输入第一个数:\c"
read a
echo -e "请输入第二个数:\c"
read b
echo -e "请选择运算符号 + - * /:\c"
read var
case $var in
"+") echo "a+b=" `expr $a + $b`;;
"-") echo "a-b=" `expr $a - $b`;;
"*") echo "a*b=" `expr $a * $b`;;
"/") echo "a*b=" `expr $a / $b`;;
*) echo "计算错误!
esac
exit 0
运行结果:错误在*) echo 这一行,' " '没有匹配(没有后引号)
使用-n选项调试上面的代码运行结果:(在执行脚本的过程中,将执行过的脚本命令打印到屏幕)
使用-n选项调试上面的代码运行结果:(将用到的脚本内容打印到屏幕i)