for命令:
for循环用于根据项目清单确定的次数执行命令。
dir=/home/jody/ellie/backupscripts
for variable in word_list
do
command(s)
done
例:
for file in memo[1-5]
do
if[-f $file]
then
cp $file $dir/$file.bak
echo " $file is backed up in $dir "
fi
done
单词列表里包含当前陌路中所有memo开头,并以1-5之间的数字结尾的文件名。
在现在的名字后面追加.bak为扩展名。
例:
for file
do
if[-f $file -a ! -x $file] or if [[ -f $file && ! -x $file ]]
then
chmod +x $file
echo $file now has execute permission
fi
done
如果for循环没有单词列表,他就自动循环位置参量。这跟for file in $*是一样的。
while命令:
while命令判断它后面的命令,如果退出状态为0,执行循环体内的命令,直到done。
例:
go=start
while[-n "$go"]
do
echo -n I love you.
read word
if[[ $word==[Qq] ]]
then
echo "I'll always love you!"
go=
fi
done
test命令-n表示检验一个非空字符串。如果go有一个初始化的值,检验就成功,如果go没有被双引号引用,变量值就为空,test命令就显示信息:
go:test:argument expected
用户输入Q q显示 I'll always love you! 然后把go赋值为空。
until命令:
until命令的用法与while命令的用法类似,只是在until后面的语句为假时候执行循环体。
例:
until who | grep linda
do
sleep 5
done
当找到用户linda时候,grep就返回0。
例:
let hour=0
until(( hour > 24))
do
case "$hour" in
[0-9] | 1[0-1])
echo "Good morning!"
;;
12)
echo "lunch time."
;;
1[3-7]
echo "Siesta time."
;;
*)
echo "Good night."
;;
esac
let hour+=1
done
select命令和菜单:
主要的作用就是建立菜单。PS3用来提示用户输入,默认的PS3是#?。在PS3提示输入后,shell等待用户输入。输入的是该菜单的数字,若输入被保存在指定变量REPLY中,则变量REPLY中的数字与括号右边选项清单中的字符串有着对应关系。
每一个选项前都有数字和右括号,PS3提示显示在菜单的底部。因为select命令是一个循环命令,因此一定要记得用break命令退出循环或exit命令退出脚本。
select var in wordlist
do
command(s)
done
例:
ps3="select a program to execute: "
select program in 'ls -F' pwd date
do
$program
done
例:
COLUMNS=60
LINE=1
PS3="Please enter the terminal type: "
select choice in wyse50 vt200 xterm sun
do
case $REPLY in
1)
export TERM=$choice
echo "TERM=$choice"
break;;
2 | 3)
export TERM=$choice
echo "TERM=$choice"
break;;
4)
export TERM=$choice
echo "TERM=$choice"
break;;
*)
echo -e "$REPLY is not a valid choice. Try again\n" 1>&2
REPLY= # Causes the menu to be redisplayed
;;
esac
done
变量COLUMNS表示在终端上显示的用select命令建立的菜单的列宽度。默认值为80
变量LINES控制菜单在终端上的垂直显示。默认显示24行。当把这个变量的值改为1时,整个菜单将显示在第1行上。
在菜单选项下面显示ps3提示符。
REPLY变量保存用户选择。REPLY如果为空,就再次显示菜单。
如果用户没有输入1到4的值,他将被提示再次输入,注意,菜单中将出现PS3提示符。
阅读(885) | 评论(0) | 转发(0) |