所谓的shell脚本是什么呢,不过是包含一些命令和声明,符合一定格式的文本文件,在给予这个文本文件执行权限之后,就可以执行这个脚本,实际上就是执行脚本中的一大堆命令。zia脚本中用到最多的就是循环语句了;只有循环语句才能把这一堆的命令条件性的执行下去。shell脚本中的格式要求就是首行的shebang机制,表示出来就是#!;
这个机制决定了我们的脚本语言类型。如下:
[root@localhost张大帅哥 bin]# vim txt
#!/bin/bash
~
~
一般来说用的都是bash,也#!/usr/bin/python #!/usr/bin/perl
接下来就能写脚本了。
今天在这里我只介绍脚本中的流程,也就是写到脚本中的命令执行顺序,这里涉及到顺序执行,循环执行,条件执行
顺序执行没什么说的,就是命令从上到下执行命令之间可以以分号为间隔,也可以以换行代替分号。
顺序执行
#!/bin/bash
echo "hello"
echo "world"
echo "nihao"
[root@localhost张大帅哥 bin]# vim txt
[root@localhost张大帅哥 bin]# chmod +x txt
[root@localhost张大帅哥 bin]# ./txt
hello
world
nihao
按照从上到下的顺序依次执行。
循环执行
所谓循环执行,就是某一条命令在一个循环体内一直执行,直到手动结束或者不再符合循环条件跳出,不再执行。
for循环
for循环的格式是
for 变量 in 循环条件;do
循环体
done
示例:
#!/bin/bash
for n in {1..10};do
echo $n
done
[root@localhost张大帅哥 bin]# ./txt
1
2
3
4
5
6
7
8
9
10
这个循环是可以嵌套的,例如打印九九乘法表
#!/bin/bash
i=0
j=0
for i in {1..9};do
for j in {1..9};do
if [ $i -ge $j ];then
echo -n "$j*$i=$[$i*$j] "
fi
done
echo
done
[root@localhost张大帅哥 bin]# ./jiujiu.sh
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
while循环
格式为
while 控制条件 ;do
循环体
done
在每次循环的时候会做出判断,如果是true执行循环体,如果是false,则跳出,例如
#!/bin/bash
n=1
while [ $n -le 10 ];do
echo $n
let n++
done
[root@localhost张大帅哥 bin]# ./txt
1
2
3
4
5
6
7
8
9
10
如用while打印九九乘法表
#!/bin/bash
i=1
j=1
while [ $i -le 9 ];do
while [ $j -le $i ];do
echo -n "$j*$i=$[$i*$j] "
let j++
done
i=$[$i+1]
j=1
echo
done
until循环
这个循环跟while正好相反,while是不满足循环条件的时候退出,而until是满足循环条件的时候退出,用法也跟while一样
例如
#!/bin/bash
n=1
until [ $n -eq 11 ];do
echo $n
let n++
done
[root@localhost张大帅哥 bin]# ./txt
1
2
3
4
5
6
7
8
9
10
条件执行
条件执行就是满足某一特定条件执行某特定语句
case条件执行
case一般用于某一变量等于或者满足某一格式的多个字符而执行不同的命令的时候。
case 变量引用 in
PAT1);;
PAT2);;
esac
这里的PAT字符支持文件名通配符,esac就是case反过来写作为结束标记,每一个条件后面要打双分号表示这个条件的命令执行结束,例如
#!/bin/bash
case $1 in
1)echo "hello";;
2)echo "world";;
*)echo "no";;
esac
[root@localhost张大帅哥 bin]# ./txt
no
[root@localhost张大帅哥 bin]# ./txt 1
hello
[root@localhost张大帅哥 bin]# ./txt 2
world
if条件执行
很明显,if意思是如果,如果满足条件则执行,格式
if 判断条件 ;then
分支 代码
elif 判断条件;then
分支代码
else
分支代码
fi
跟case差不多,fi是结束符
#!/bin/bash
if [ $1 -eq 1 ];then
echo "hello"
elif [ $1 -eq 2 ];then
echo "world"
else
echo "no"
fi
[root@localhost张大帅哥 bin]# ./txt 0
no
[root@localhost张大帅哥 bin]# ./txt 1
hello
[root@localhost张大帅哥 bin]# ./txt 2
world
[root@localhost张大帅哥 bin]# vim txt
select条件执行
select是一个菜单样式的条件执行语句,在这里PS3是等待用户输入的提示语,在这里可以看出select经常结合case
使用。
例如
#!/bin/bash
fruits=(
"apple"
"pear"
"orange"
"watermelon"
)
echo "Please guess which fruit I like :"
select var in ${fruits[@]}
do
if [ $var = "apple" ]; then
echo "Congratulations, you are my good firend!"
break
else
echo "Try again!"
fi
done
[root@localhost张大帅哥 bin]# ./select.sh
Please guess which fruit I like :
1) apple
2) pear
3) orange
4) watermelon
#? 2
Try again!
#? 3
Try again!
#? 4
Try again!
#? 1
Congratulations, you are my good firend!
可以看到这里有一个#?看着很不具有亲和力,我们就可以通过设置PS3去把它改掉
#!/bin/bash
PS3='please choose: '
[root@localhost张大帅哥 bin]# ./select.sh
Please guess which fruit I like :
1) apple
2) pear
3) orange
4) watermelon
please choose: 1
Congratulations, you are my good firend!
这样就行了,脚本中涉及数组,我会在以后的博文中更新的,脚本涉及的东西很多,很考验对命令的熟练使用,以及逻辑能力。