case分支
case语句和select语句可以构成分支
case “$变量” in
“情况1” )
命令… ;;
“情况2” )
命令… ;;
……. )
命令…; ;
esac
下面是一个程序的举列
1 | !/bin/bash |
for的基本使用
使用for循环遍历命令的执行结果
for循环语法
for 参数 in 列表
do 执行的命令
done 封闭一个循环
- 上面是for循环的基本格式,我们可以使用{}来产出列表例如{1..9}表示的是从1到9
- mkdir {1..9}
1
2
3
4
5!/bin/bash
for filename in `ls *.mp3`
do
mv $filename $(basename $filename .mp3).mp4
done需要注意的一点便是在in的后面使用的并不是单引号
使用反引号或$()方式执行命令,命令结果当作列表进行处理
列表中包含多个变量,变量用空格分隔
对文本处理,要使用文本来查看命令取出文本内容
默认是逐行处理,如果出现空格会当作多行处理
使用for循环遍历变量和文件内容
c语言风格的for命令
for((变量初始化;循环的判断条件;变量变化))
do
循环执行命令
done
#!/bin/bash for ((i=1;i<=10;i++)) do echo $i done
下面时一个程序的举列1
2
3
4
5
6
7
8
9
10
11
这样的写法事实上并不常用
- #### while循环
- ```shell
#!/bin/bash
while test测试一直成立
do
命令
done1
2
3
4
5
6!/bin/bash
while [$a -lt 10]
do
((a++))
echo $a
done
until循环
until循环与while循环完全相反,循环测试为假时,执行循环,为真时循环停止
#!/bin/bash until [ 5 -lt 4 ] do echo always done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- #### 循环的使用
- 循环和循环可以嵌套
- 循环中可以嵌套判断,反过来可以嵌套
- 循环可以使用break和continue语句在循环中退出
```shell
#!/bin/bash
for sc_name in /etc/profile.d/*.sh
do
if [ -x $sc_name ] ; then
. $sc_name
fi
done
break和continue
1
2
3
4
5
6
7
8!/bin/bash
for num in {1..9}
do
if [ $num -ep 5 ] ; then
break
fi
echo $num
done使用了break之后下面的命令就不会在进行执行,而如果使用continue则仅仅是跳过
使用循环对命令参数的处理
命令行参数可以使用$1 $2……进行读取
$0 代表脚本名称
$*和$@代表所有位置参数
$#代表位置参数的数量
1
2
3
4
5
6
7
8!/bin/bash
如果参数中包含help则显示两次help
for pos in $*
do
if [ "$pos" = "help" ] ; then
echo $pos $pos
fi
done以上为for循环的写法,我们也可以使用while来实现
1
2
3
4
5
6
7
8!/bin/bash
while [ $# -ge 1]
do
if [ "$1" = "help" ] ; then
echo $1 $1
fi
shift
done其中shift的作用可以每次减去一个参数,让参数向左移动