【原创】shell学习笔记第四天(条件判断二) – 21运维
通知: .-...

【原创】shell学习笔记第四天(条件判断二)

shell 21运维 1749浏览 0评论
学习下条件判断第二部分
1,学习if …. then  简单判断或多层判断,符合条件做什么,不符合条件又做什么。这个是经常用到的,看一眼就会了。
if [ 条件判断式 ]; then
	当条件判断式成立时,可以进行的命令工作内容;
fi<==将 if 反过来写,就成为 fi 啦!结束 if 之意!
# 一个条件判断,分成功进行与失败进行 (else)if [ 条件判断式 ]; then
	当条件判断式成立时,可以进行的命令工作内容;
else
	当条件判断式不成立时,可以进行的命令工作内容;
fi

比如下边自己随便写一个非常简单例子以供理解ifthen判断说明用法:

该sh脚本用来简单测试下web和ftp是否正常启动的, 首先使用webtest和ftptest获取变量内容,根据变量值进行判断输出。
 
#!/bin/bash
webtest=$(netstat -tunlp | grep “:80″ )
ftptest=$(netstat -tnulp | grep “:21″)
echo $webtest   //先输出看下内容
echo $ftptest
if [ “$webtest” != “” ]; then  //判断说明,这个条件也可以用其他方式判断,比如if [ $webtest  ==  “”  ];then…就是后边的语句要修改了,反过来写。
echo “web is running! “
else
echo “web is not running!WEB is dead,please check! “
fi
if [ “$ftptest” != “” ]; then
echo “ftp is runing “
else
echo “ftp is dead,please check!”
fi
执行结果:
[[email protected] ~]# sh test.sh
web test is : tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1158/httpd  tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1128/nginx
helloftp is : tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1148/pure-ftpd (SER
web is running!
ftp is runing
补充说明:多重判断,根据情况来定是否用那种
# 多个条件判断 (if ... elif ... elif ... else) 分多种不同情况运行if [ 条件判断式一 ]; then
	当条件判断式一成立时,可以进行的命令工作内容;
elif [ 条件判断式二 ]; then
	当条件判断式二成立时,可以进行的命令工作内容;
else
	当条件判断式一与二均不成立时,可以进行的命令工作内容;
fi
2,利用 case ….. in ….. esac 判断
case  $变量名称 in<==关键字为 case ,还有变量前有钱字号
  "第一个变量内容")<==每个变量内容建议用双引号括起来,关键字则为小括号 )
	程序段
	;;<==每个类别结尾使用两个连续的分号来处理!
  "第二个变量内容")
	程序段
	;;
  *)<==最后一个变量内容都会用 * 来代表所有其他值
	不包含第一个变量内容与第二个变量内容的其他程序运行段
	exit 1
	;;esac<==最终的 case 结尾!『反过来写』思考一下!
 写一个简单的例子理解一下:

#/bin/bash
 
read  -p  “please input one word:” y
case $y  in
“1”)
echo  “you input int 1~”
;;
“2”)
echo  “you input int 2~”
;;
“3”)
echo  “you input int 3~”
;;
*)
echo   “you dont input 123”
;;
esac
要注意的是,这个语法以 case (实际案例之意) 为开头,结尾自然就是将 case 的英文反过来写!就成为 esac 罗! 不会很难背啦!
每一个变量内容的程序段最后都需要两个分号 (;;) 来代表该程序段落的结束,这挺重要的喔!
至於为何需要有 * 这个变量内容在最后呢?这是因为,如果使用者不是输入变量内容一或二时, 我们可以告知使用者相关的资讯啊!

一般来说,使用『 case $变量 in 』这个语法中,当中的那个『 $变量 』大致有两种取得的方式:

  • 直接下达式:例如上面提到的,利用『 script.sh variable 』 的方式来直接给予 $1 这个变量的内容,这也是在 /etc/init.d 目录下大多数程序的设计方式。
  • 互动式:透过 read 这个命令来让使用者输入变量的内容
4 , 利用function 函数实现 关键函数fname算法。
function fname() {
	程序段
}
注意: shell script 的运行方式是由上而下,由左而右, 因此在 shell script 当中的 function 的配置一定要在程序的最前面, 这样才能够在运行时被找到可用的程序段!
写一个简单的例子了解下:

#!/bin/bash
function  printit(){
        echo -n “Your choice is ”  
}
 
echo “This program will print your selection !”
read  -p  “please input  one word:” y
case $y in
  “one”)
        printit; echo $y | tr ‘a-z’ ‘A-Z’
        ;;
  “two”)
        printit; echo $y | tr ‘a-z’ ‘A-Z’
        ;;
  “three”)
        printit; echo $y | tr ‘a-z’ ‘A-Z’
        ;;
  *)
        echo “pleast input  {one|two|three}”
        ;;
esac

 

转载请注明:21运维 » 【原创】shell学习笔记第四天(条件判断二)

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址