注意1: if 表达式和case 表达式的区别及什么时候使用哪个要有明确的区分?
『 if .... then .... fi 』对于变量的判断是以『比对』的方式来分辨的, 如果符合状态就进行某些行为,并且透过较多层次 (就是elif ) 的方式来进行多个变量的程序代码撰写(针对性不强,范围大的时候使用)。
『 case ... in .... esac』 使用在变量的内容已经既定,就只有几个选择的时候使用(具有很强的正对性);
注意1:脚本中,变量的下达方式是怎么样的呢?
直接下达方式: 在执行脚本的时候后面加上参数($1,$2......) 如: ./xx.sh 参数1 参数2 .....
交互式下达方式:通过 read 这个指令来让用户输入变量的内容。
一『 if .... then .... fi 』的使用基本方法
1、单一的条件判断式:
语法:
if [ 条件判断式 ]; then当条件判断式成立时,可以进行的指令工作内容; fi //将if反过来写,就是结束if之意!
&& 代表 AND
|| 代表 or
forexample:
#!/bin/bash set -x //进行查错功能 #program; # This program shows the user's choice #History: #2017/06/21 likui First release PATH=/bin:/sbin:/uer/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/bin export PATH read -p "Please input (Y/y)" yn if [ "$yn" == "Y" ] || [ "$yn" = "y" ]; then echo "OK,continue" //if 和 if 之间添加我们需要的代码 exit 0 fi if [ "$yn" == "N" ] || [ "$yn" == "n" ]; then echo "Oh,interrupt!" exit 0 fi echo "I don't know what your choice is "
2、多重、复杂条件判断式
语法1:
# 一个条件判断,分成功进行与失败进行 (else)
if [ 条件判断式 ]; then当条件判断式成立时,可以进行的指令工作内容 else当条件判断式不成立时,可以进行的指令工作内容 fi
语法2:
# 多个条件判断 (if ... elif ... elif ... else) 分多种不同情况执行
if [ 条件判断式一 ]; then当条件判断式一成立时,可以进行的指令工作内容 elif [ 条件判断式二 ]; then当条件判断式二成立时,可以进行的指令工作内容 else当条件判断式一与二均不成立时,可以进行的指令工作内容; fi
forexample1:
forexample2:
forexample3:
#!/bin/bash # Program: # You input your demobilization date, I calculate how many days # before you demobilize. # History: # 2005/08/29 VBird First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~ /bin export PATH # 1. 告知用户这支程序的用途,并且告知应该如何输入日期格式? echo "This program will try to calculate :" echo "How many days before your demobilization date..." read -p "Please input your demobilization date (YYYYMMDD ex>20090401): " date2 # 2. 测试一下,这个输入的内容是否正确?利用正规表示法啰~ date_d=$(echo $date2 |grep '[0-9]\{8\}') # 看看是否有八个数字 if [ "$date_d" == "" ]; then echo "You input the wrong date format...." exit 1 fi # 3. 开始计算日期啰~ declare -i date_dem=`date --date="$date2" +%s` # 退伍日期秒数 declare -i date_now=`date +%s` # 现在日期秒数 declare -i date_total_s=$(($date_dem-$date_now)) # 剩余秒数统计 declare -i date_d=$(($date_total_s/60/60/24)) # 转为日数 if [ "$date_total_s" -lt "0" ]; then # 判断是否已退伍 echo "You had been demobilization before: " $((-1*$date_d)) " ago" else declare -i date_h=$(($(($date_total_s-$date_d*60*60*24))/60/60)) echo "You will demobilize after $date_d days and $date_h hours." fi
二、『 case ... in .... esac』的基本用法:
1、单一的case条件判断式:
基础语法:
case $变量名称 in //关键词为 case ,还有变数前有钱字号"第一个变量内容") //每个变量内容建议用双引号括起来,关键词则为小括号 )程序段;; //每个类别结尾使用两个连续的"第二个变量内容")程序段;;*) //最后一个变量内容都会用 * 程序段 //来代表所有其他值不包含第一个变量内容与第二个变量内容的其他程序执行段;; esac
forexample:
forexample2: 变量的2种下达方式的程序代码