文章目录
循环控制符(linux的shell编程中,有时需要立即从循环中退出)
break #跳出当前循环,break 可以跟参数,不带参数只能退出最内层的循环,break N可以退出N层循环
continue #跳过本次循环,执行下一次循环,continue也可以带参数,不带参数只能跳过本次本层循环,continue 2可以跳过外部循环的下一次循环,但是循环次数不变。
break循环的两个例子
for (( i=1; i<=9; i++ ))
do
for (( j=1; j<=i; j++ ))
do
let "he=i*j"
if [ "$he" -eq 7 ];then
break
fi
echo -n "$i*$j=$he "
done
echo ""
done
[root@localhost ~]# sh ceshi.sh
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
for (( i=1; i<=9; i++ ))
do
if [ "$i" -eq 7 ];then
break
fi
for (( j=1; j<=i; j++ ))
do
let "he=i*j"
echo -n "$i*$j=$he "
done
echo ""
done
[root@localhost ~]# sh ceshi.sh
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
continue例子
for (( i=1; i<=9; i++ ))
do
for (( j=1; j<=i; j++ ))
do
let "he=i*j"
if [ "$he" -eq 7 ];then
continue
fi
echo -n "$i*$j=$he "
done
echo ""
done
[root@localhost ~]# sh ceshi.sh
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
case 分支结构 及常见用法
即:case (in) / esac 分支结构
case简单用法示例一:判断输入字符类型
#!/bin/bash
# 测试字符串范围.
echo "Hit a key, then hit return."
read Keypress
case "$Keypress" in
[[:lower:]] ) echo "$Keypress 是 小写字母";;
[[:upper:]] ) echo "$Keypress 是 大写字母";;
[0-9] ) echo "$Keypress 是 数字";;
* ) echo "$Keypress 是 Punctuation, whitespace, or other";;
esac # 允许字符串的范围出现在[中括号]中,
#+ 或者出现在POSIX风格的[[双中括号中.
#+ 测试大写和小写字符串的工作使用的是
#+ [a-z] 和 [A-Z].
# 这种用法在某些特定场合的或某些Linux发行版中不能够正常工作.
# POSIX 的风格更具可移植性.
# 感谢Frank Wang指出了这点.
exit 0
case简单用法示例二:创建菜单
#!/bin/bash
# 未经处理的地址资料
clear # 清屏.
echo " Contact List"
echo " ------- ----"
echo "Choose one of the following persons:"
echo "[E]vans, Roland"
echo "[J]ones, Mildred"
echo "[S]mith, Julie"
read person
case "$person" in
# 注意, 变量是被""引用的.
"E" | "e" )
# 接受大写或者小写输入.
echo
echo "Hardscrabble, CO 80753"
;;
"J" | "j" )
echo
echo "New York, NY 10009"
;;
# 后边的 Smith 的信息在这里就省略了.
* )
# 默认选项.
# 空输入(敲回车RETURN), 也适用于这里.
echo
echo "Not yet in database."
;;
esac
exit 0
case简单用法示例三:使用命令替换来产生"case"变量
#!/bin/bash
# 使用命令替换来产生"case"变量.
case $( arch ) in
# "arch" 返回机器体系的类型.
# 等价于 'uname -m' ...
i386 ) echo "32 bit machine";;
x86_64 ) echo "x86_64 bit machine";;
* ) echo "Other type of machine";;
esac
exit 0
case简单用法示例四:判断输入参数(比较实用,如写help信息)
#!/bin/bash
case "$1" in
"" ) echo "对不起,您没有输入任何参数";;
# 没有命令行参数, 或者第一个参数为空.
"-h"|"--help" )
echo " -v 显示版本"
echo " -h | --help 查看帮助"
echo " -x xxxxxxxx"
;;
-* ) echo "这是-开头的参数";;
* ) echo "对不起,请正确输入参数";;
esac
select 交互式分支结构(用于交互式菜单,它比case多了交互性)
select交换式菜单的格式
select variable in {list}
do
command
........
break
done
例子一、简单的交互式菜单(输入前面的数字进行选择)
#!/bin/bash
# 注意: select命令使用PS3提示符, 默认为(#?), 当然, 这可以修改。设置提示符字串
PS3='Choose your favorite vegetable: '
echo
select vegetable in "beans" "carrots" "potatoes" "onions" "rutabagas"
do
echo
echo "Your favorite veggie is $vegetable."
echo "Yuck!"
echo
break # 如果这里没有 'break' 会发生什么? 没有break会一直循环,不会退出
done
exit 0
例子二、设计一个交互式菜单
echo "请输入一个颜色单词"
select color in "red" "black" "green" "white" "blue"
do
break
done
echo "你输入的颜色是$color"
[root@localhost ~]# sh ceshi.sh
请输入一个颜色单词
1) red
2) black
3) green
4) white
5) blue
#? 3
你输入的颜色是green
[root@localhost ~]#
例子三、select 使用函数进行传参
#!/bin/bash
PS3='Choose your favorite vegetable: '
echo
choice_of()
{
select vegetable
# [in list]被忽略, 所以'select'使用传递给函数的参数.
do
echo
echo "Your favorite veggie is $vegetable."
echo "Yuck!"
echo
break
done
}
choice_of beans rice carrots radishes tomatoes spinach
# $1 $2 $3 $4 $5 $6
# 传递给choice_of()的参数
exit 0
### 运行结果如下
root@ser552965470679:~# ./test.sh
1) beans
2) rice
3) carrots
4) radishes
5) tomatoes
6) spinach
Choose your favorite vegetable: 6
Your favorite veggie is spinach.
Yuck!
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论