我是靠谱客的博主 爱笑蜻蜓,最近开发中收集的这篇文章主要介绍shell详解二,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.控制结构

在下面的小节中,各语句的语法中的statements表示(when、while或until)测试天剑满足时,将要执行的一系列命令。


1.if语句

if      condition

then

statements

else

statements

fi


      2.elif语句

#!/bin/sh

echo "Is it morning?Please answer yes or no"
read timeofday

if [ $timeofday = "yes" ]
then
    echo "Good morning"
elif [ $timeofday = "no" ] ; then
    echo "Good afternoon"
else
     echo "Sorry,$timeofday not recongnized .Enter yes or no"
     exit 1
fi
exit 0




      3.一个与变量有关的问题

     刚才所做的修改弥补了一个非常明显的缺陷,但这个脚本程序还潜藏着一个更隐蔽的问题。运行这个新的脚本程序,但是这次不回答问题,而是直接按下回车键我们

将看到如下所示的出错信息;

[ : =: unary operator expected

哪里出问题了呢?问题就在第一个if语句。在对变量timeofday进行测试的时候,它包含一个空字符串,这使得if语句成为下面这个样子:

             if   [  = "yes" ]  这不是一个合法的条件,为了避免出现这种情况,我们必须给变量加上引号,

              if  [  "$timeofday" = "yes" ]   这样,一个空变量提供给我们一个合法的测试: 

if [  "$timeofday"  =  "yes"  ]


4.for语句

我们用for结构来循环处理一组值,这组值可以是任意字符串的集合。

它的语法很简单:

for   variable    in     values

do

statements

 done


如果把第一行由for  too  in  bar  fud   43   修改为 for  foo  in   "bar  fud  43"  会怎样呢?别忘了,加上引号就等于告诉shell把引号之间的一切东西看作是一个字符串。


#!/bin/sh

for  file  in   $(ls  f*.sh); do
    lpr   $file
done 
exit 0


     5.while语句

while    condition    do

statements

 done

#!/bin/sh

echo "Enter password"
read  trythis

while  [ "$trythis " = "secret" ] ;do
echo  "Sorry  ,try again"
read trythis
done
exit 0

很明显,这不是一种询问密码的非常安全的办法,但它却是演示了while语句的作用。


#!/bin/sh

foo=1

while [ "$foo" -le 20 ]
do 
     echo "Here we go again"
      foo=$(($foo+1))
done
exit 0

     6.until语句

           until语句的语法如下所示:

  until     condition

          do

   statements

   done

                     它与while循环很相似,只是把条件测试反过来了。


#/bin/sh

until  who |  grep  "$1" > /dev/null
do
     sleep 60
done

echo  -e  \a
echo  "*****$1 has just logged in ******"
exit 0

7

.case语句

     case 结构比我们迄今为止见过的其他结构都要稍微复杂一些,

      case  variable  in

                pattern    [  |  pattern]   ...)  statements;;

pattern    [  |  pattern]   ...)  statements;

                .....

        esac


      你在case 结构中使用如*这样的通配符时要小心,因为case将使用第一个匹配的模式,即使后续的模式有更加精确的匹配也是如此。


#!/bin/sh

echo  "Is it morning? Please answer yes or no"
 read  timeofday

case "$timeofday"  in
           yes)    echo "Good morning";;
            no )    echo  "Good Afternoon";;
            y   )    echo  "Good Morning";;
            n   )    echo   "Good Afternoon";;
            *   )    echo   "Sorry ,answer not recognized";;
      esac
exit 0

             



最后

以上就是爱笑蜻蜓为你收集整理的shell详解二的全部内容,希望文章能够帮你解决shell详解二所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部