case语句
case语句允许进行多重条件选择。其一般语法形式是:
case 字符串 in
模式字符串1) 命令
…
命令;;
模式字符串2) 命令
……
命令;;
模式字符串n) 命令
命令;;
esac
其执行过程是,用“字符串”的值依次与各模式字符串进行比较,若发现同某-个匹配,则执行该模式字符串之后的各命令,直至遇到“;;”为止:若没有任何模式字符串与该字符串的值相符合,则不执行任何命令。例如:
echo “Please chose either1, 2 or 3”
echo“[1] print a file"
echo “[2] delete a file”
echo “[3] quit”
read response
case $response in
-
1pmyfile;;
-
rm myfile;;
-
echo “Good bye”;;
esac
在使用case语句时应注意:一条成多条俞令, 其最后一条命令必须以“的结事,
①每个模式字符串后面可有一
检查命令行的第一个参数是否为内_b或-s。若是-b,则计算由第二个参数指定的文件中以b开头的行数。若是-8.则计算由第二个参数指定的文件中以⁻s开头的行数,若第一个参数不是⁻b也不是⁻s,则显示条选择有错的信息。
case $1 in
-b) count=’ grep ^b $2 | wc -1’
echo “The number of lines in $2 that start with b is $count.”;
-s) count=‘igrep ^s $2 | wc_ 1’
echo"The number of lines in $2 that start with s is $count.”;;
*) echo “That option is not recognized”;;
esac
②模式字符串中可以使用通配符,例如:
case $1 in
-u) echo “Searching /usr/ lognamei for : $2”
find /usr/ logname^ -name $2 -print ;
-[cs]) echo “Searching for command : $2”
find /bin/usr/bin/etc -name $2 print ;;
*) echo “invalid first argument.”;;
esac
③如果一个模式字符串中包含多个模式,那么各模式之间应以“I”隔开,表示各模式是“或”的关系,即只要给定字符串与其中一个模式相配,就会执行其后的命令表。例如:
case$choice in
time|date ) echo"The time is‘ date^ .";;
dir|path ) echo “Current directory is、 pwd^.”;;
*) echo"bad argument.";;
esac
④各模式字符串应是唯一 的,不应重复出现,并且要合理安排它们的出现顺序。例如,不应将作为头一个模式字符串。 因为可以与任何字符串匹配,它若第一个出现,就不会再检查其他模式了。
⑤case语句以关键字case开头,以关键字esac (case 倒过来写)结束。
⑥case的退出(返回)值是整个结构中最后执行的那个命令的退出值。若没有执任何命令,则退出值为0。