1、判断基础知识
当要检测某个文件或者文件d的相关属性,可以利用 test 命令
[root @loacalhost ~]#test -e /vitest
使用 test 命令检测 目录vitest是否存在
但是不会显示任何结果,因此进行改进为有“参数”输出的形式
[root @loacalhost ~]#test -e /vitest && echo "The dir exist" || echo "Not exist"
给出标志判断表
除了使用test之外,还可以使用 [] 判断符号进行判断
[root @loacalhost ~]#[ -z "$HOME" ];echo %?
注意:因为中括号 [] 使用的地方很多,常见的有通配符和正则表达式,所以在bash语法重法中使用[] 作为shell的判断时,必须中括号[]的两端需要有空格来分割
1、中括号 [] 内的每个组件都需要空格键来分割
2、中括号 [] 内的变量,最好都以双引号括起来
3、中括号 [] 内的常量,最好以双引号或者单引号括起来
[root @loacalhost ~]#name="rhx" #变量赋值时=左右两侧不能有空格
[root @loacalhost ~]#[ $name == "HOME" ] #判断时=的左右两侧必须有空格
2、条件判断式
条件判断式即是满足某个条件时执行一个动作,不满足会执行相应的其他动作,下面一一介绍
a、单层 if...then 判断
if [ 条件判定式 ];then #注意条件判定式左右两侧有空格
action #条件成立时,执行action中的操作
fi #结束if判断,相当于是if左右翻转
示例如下:
#!/bin/bash
#program:
# This program shows "Hello World!" in your screen
#History:
#205/08/3 rhx First Release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "Please input (Y/N): " yn
if [ "$yn" == "Y" ] || [ "$yn" == "y" ];then
echo "Ok ,continue"
exit 0
fi
if [ "$yn" == "N" ] || [ "$yn" == "n" ];then
echo "Oh interrupt"
exit 0
fi
echo "I do not know what your choice is "&& exit 0
b、多重复杂判断 if elif else
if [ 条件判定式1 ];then #注意条件1判定式左右两侧有空格
action1 #条件成立时,执行action1中的操作
elif [ 条件判定式2 ];then
action2 #条件2成立时,执行action2中的操作
fi #结束if判断,相当于是if左右翻转
#!/bin/bash
#program:
# This program shows "Hello World!" in your screen
#History:
#205/08/3 rhx First Release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "Please input (Y/N): " yn
if [ "$yn" == "Y" ] || [ "$yn" == "y" ];then
echo "Ok ,continue"
elif [ "$yn" == "N" ] || [ "$yn" == "n" ];then
echo "Oh interrupt"
fi
在shell scripts中,scritpt针对参数有一些特殊设置,参数的对应关系如下,$0表示文件名
/tmp/scrpts opt1 op2 opt3 opt4
$0 $1 $2 $3 $4
#!/bin/bash
#program:
# This program shows "Hello World!" in your screen
#History:
#205/08/3 rhx First Release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#read -p "Please input (Y/N): "yn
if [ "$1" == "hello" ];then
echo "Hello,how are you ?"
elif [ "$1" == "" ];then
echo "You MUST input parameters,ex> {$0 someword}"
else
echo "The only parameters is 'hello',ex> {$0 hello}"
fi

c、case ...esac
case $variable in #关键字case,变量variable前有符号$
"value1") #每个变量的内容建议用双括号括选起来,关键字外面为小括号),注意这里不同于常见的c/c++语言
;; #每个类型结束使用连续两个分号
"value2"
;;
*) #最后一个变量内容会用*来表示其他的值,像c/c++中的default选项
;;
esac #case语法结束
示例如下:
#!/bin/bash
#program:
# This program shows "Hello World!" in your screen
#History:
#205/08/3 rhx First Release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
function printit(){
echo -n "Your choice is "
}
echo "This program will print your selection!"
case $1 in
"one")
printit;echo $1 | tr 'a-z' 'A-Z'
;;
"two")
printit;echo $1 | tr 'a-z' 'A-Z'
"three")
printit;echo $1 | tr 'a-z' 'A-Z'
;;
*)
echo "Usage $0 {one|two|three}"
;;
esac
d、利用 function 功能
function funcname () {
程序段
}
注意function中的$0,$1,$2与script中有所不同