shell编程分支,循环

1。分支

 

也就是判断了,先介绍下test(这里牵扯到一个问题,我们写shell时候无论是变量,还是文件名尽量不要和指令名冲突),例如我们想看看当前目录下是否有first.sh这个文件,有就输出haha ,没有就heihei.

[root@liumengli my_shell]# cat shell_example.sh
#!/bin/sh

if [ -f first.sh ]
then
        echo 'This file exit!'
else
        echo 'do not exit!'
fi
exit 0
[root@liumengli my_shell]#

#!/bin/sh

if test -f first.sh
then
        echo 'This file exit!'
else
        echo 'do not exit!'
fi
exit 0

这里test有2中写法,一个是[] 另一个是test,我倾向于[],因为看上去比较清楚,注意的是[]里面2边都记得和判断体有空格,不然会出错(shell对空格要求还真是死,麻烦的东西)。上面就囊括了语法了,语法也不多说了,但大家会对判断体有些疑问,-f first.sh啥意思,意思就是是否在当前目录下能找到first.sh文件,如何比较其它的呢,比如比较2个数大小,我怎么知道那些可以做为判断体,那些不行呢,例如:判断 猫是否是狗这个是否可行呢???这个我也记不住,但也不需要记住,大家执行下man test 就很清楚了,不记得就去查。

帮助手册上有的就不列举了, test比较有3大类,字符串比较,算术比较(貌似我到现在还没写过算术shell脚本),与文件有关的测试

 

刚看了if的控制结构,这里列举下

if condition

then

     statement

else

     statement

fi

记得换行要清楚,不然会出错,当然可以通过加;号来避免,当这样既不出错,可读性又好的写法还是比;号好用不是。;号的写法像这样

#!/bin/sh

if [ -f first.sh ];then
        echo 'This file exit!'
else
        echo 'do not exit!'
fi
exit 0

 

到目前为止,还有个问题,我的分支只有2条路,那我想要第3个岔路呢?那就用到了elif,下面是例子

[root@liumengli my_shell]# cat shell_example.sh
#!/bin/sh

echo "Hello, is it morning? Please answer yes or no?"
read time

if [ $time = "yes" ]; then
        echo 'Good morning'
elif [ $time = "no" ]; then
        echo 'Good afternoon'
else
        echo 'Your answer is not recognized!'
        exit 1
fi
exit 0

 

还有一个重要用法就是

if 命令1

then

      命令2

else

      命令3

fi

 

exit 0

 

如果命令1成功运行(意思就是exit 0)执行命令2,如果命令1执行失败(意思就是exit 1或其他非0的数)就会执行命令命令3

 

其实

if 命令1   就是等于 命令1 if [ $? -eq 0 ] $?记载的是上一个命令的返回状态。

 

2循环

for循环,样例

#!/bin/sh

for foo in 'hello world' 'yuna' 'rikku'
do
        echo $foo
done
exit 0

foo会一个一个去取in后面的内容,然后把它们显示到屏幕上,我想这个很好理解

#!/bin/sh

for foo in `ls *.sh`
do
        echo $foo
done
exit 0
这个我想也不难理解

明显缺陷出来了,对固定次数的循环for就有点麻烦了,比如你想循环打印hello 5次,写成

#!/bin/sh

for foo in 1 2 3 4 5
do
        echo hello
done
exit 0
总是比较麻烦的。

 

while循环

语法是

while condition do

statements

done

很容易理解,给个简单的例子,循环打印hello world 10次

[root@liumengli my_shell]# cat while_shell.sh
#!/bin/sh

i=0
while [ $i -lt 10 ]
do
        echo "hello world"
        i=$(($i+1))
done
exit 0

 

until循环,和while 很像,就是条件成立时候退出循环,不成立进入循环体,和WHILE相反

[root@liumengli my_shell]# cat until_shell.sh
#!/bin/sh
read stat
until [ $stat = "hello" ]
do
        read stat
done

exit 0
[root@liumengli my_shell]#

你可能感兴趣的:(编程,F#,脚本)