if語句結構
用法1:
if CONDITION; then
statement
statement
fi
CONDITION條件的寫法:
COMMAND
[ expression ]
expression表達式:
數學表達式
字元表達式
檔案目錄表達式
數學表達式:
[ number1 -eq number2 ] 等于
[ number1 -ne number2 ] 不等于
[ number1 -gt number2 ] 大于
[ number1 -ge number2 ] 大于等于
[ number1 -lt number2 ] 小于
[ number1 -le number2 ] 小于等于
例子:
編寫腳本, 由使用者輸入使用者名,判斷使用者不存在則建立之
#!/bin/bash
#
read -p "請輸入使用者名:" name
id $name &> /dev/null
if [ $? -ne 0 ]; then
useradd $name
echo "redhat" | passwd --stdin $name &> /dev/null
echo "使用者$name建立完成"
fi
#!/bin/bash
#
read -p "請輸入使用者:" name
if ! id $name &> /dev/null; then
useradd $name
echo "redhat" | passwd --stdin $name &> /dev/null
echo "使用者$name建立完成."
fi
用法2: 單分支if
if CONDITION; then
statement
statement
else
statement
statement
fi
編寫腳本,由使用者輸入使用者名,判斷使用者不存在則建立之,并設定使用者第一次登入系統時需要修改密碼;否則提示使用者已經存在
#!/bin/bash
#
read -p "Enter user: " name
if id $name &> /dev/null; then
echo "使用者$name已經存在"
else
useradd $name
echo "redhat" | passwd --stdin $name &> /dev/null
passwd -e $name &> /dev/null
echo "使用者$name建立成功,初始密碼為redhat"
fi
編寫腳本,判斷使用者的uid和gid,如果相同,顯示Good user,否則顯示bad user
#!/bin/bash
#
read -p "輸入使用者名: " name
user_id=`id -u $name`
group_id=`id -g $name`
if [ $user_id -eq $group_id ]; then
echo "Good user."
else
echo "Bad user."
fi
分支判斷結構
if, case
結構1)
if CONDITIOIN; then
statement
statement
fi
結構2)
if CONDITIOIN; then
statement
statement
else
statement
statement
fi
CONDITIOIN條件:
COMMAND
[ expression ]
編寫腳本,由使用者輸入使用者名,判斷使用者是否存在,如果不存在,就顯示使用者不存在,如果存在,以下面格式輸出使用者相關資訊:
使用者名:
宿主目錄:
SHELL程式:
#!/bin/bash
#
read -p "Enter user: " name
if id $name &> /dev/null; then
echo "使用者名:$name"
homedir=`grep "^$name:" /etc/passwd | awk -F: '{print $6}'`
shname=`grep "^$name:" /etc/passwd | awk -F: '{print $7}'`
echo "宿主目錄:$homedir"
echo "SHELL名稱:$shname"
else
echo "使用者$name不存在"
fi
編寫腳本,判斷檔案中是否存在空行,有則顯示空行個數,沒有則顯示檔案内容,并在每一行前顯示行号
#!/bin/bash
#
read -p "請輸入檔案名稱(Full Path): " file
if grep "^$" $file &> /dev/null; then
number=`grep "^$" $file | wc -l`
echo "檔案$file中空行的數量:$number"
else
echo "檔案$file内容如下:"
cat -n $file
fi
用法3: 多分支if結構
if CONDITION; then
statement
statement
elif CONDITION; then
statement
statement
elif CONDITIOIN; then
statement
statement
else
statement
statement
fi
多個條件的寫法:
AND [ condition1 -a condition2 ] [ condition1 ] && [ condition2 ]
OR [ condition1 -o condition2 ] [ condition1 ] || [ condition2 ]
編寫腳本, 判斷目前系統時間的小時數字
9--11 morning
12--14 noon
15---18 afternoon
night
#!/bin/bash
#
hour=`date +%H`
if [ $hour -ge 9 -a $hour -le 11 ]; then
echo "Morning"
elif [ $hour -ge 12 -a $hour -le 14 ]; then
echo "Noon"
elif [ $hour -ge 15 -a $hour -le 18 ]; then
echo "Afternoon"
else
echo "Night"
fi
[ expression ]
數學表達式
字元表達式
[ str1 == str2 ]
[ str1 != str2 ]
[ -z str1 ] 判斷字元串是否為空的
#!/bin/bash
#
read -p "請輸入密碼:" pwd1
read -p "請再次輸入密碼:" pwd2
if [ "$pwd1" == "$pwd2" ]; then
echo "密碼設定成功"
else
echo "密碼不一緻,請重試"
fi
檔案目錄表達式
[ -e file ] 判斷檔案目錄是否存在
[ -f file ] 判斷是否為檔案
[ -d file ] 判斷是否為目錄
[ -r file ]
[ -w file ]
[ -x file ]
雙目表達式
單目表達式: [ -e file ] [ ! -e file ]
用法4: 嵌套if
if CONDITION; then
if CONDITION; then
statement
statement
else
statement
statement
fi
else
statement
statement
fi
#!/bin/bash
#
read -p "Enter user: " name
if id $name &> /dev/null; then
#擷取UID,GID并進行判斷
user_id=`id -u $name`
group_id=`id -g $name`
if [ $user_id -eq $group_id ]; then
echo "Good user"
else
echo "Bad user"
fi
else
echo "使用者$name不存在"
fi
編寫腳本,由使用者輸入檔案名,再由使用者輸入目錄名稱,将該檔案備份到對應的目錄
#!/bin/bash
#
read -p "輸入備份檔案(Full path): " file
if [ -f $file ]; then
#備份檔案
read -p "輸入備份目錄: " dir
if [ -d $dir ]; then
cp $file $dir
echo "檔案$file已被複制到$dir目錄"
else
mkdir -p $dir
cp $file $dir
echo "檔案$file已被複制到$dir目錄"
fi
else
echo "檔案$file不存在"
fi
編寫腳本,判斷CD光牒是否挂載,顯示其挂載點名稱;否則由使用者輸入挂載點名稱,挂載CD光牒
#!/bin/bash
#
if df -hT | grep sr0 &> /dev/null; then
mount_point=`df -hT | grep sr0 | awk '{print $NF}'`
echo "CD光牒挂載點: $mount_point"
else
read -p "輸入挂載點目錄:" mount_point
if [ -d $mount_point ]; then
mount /dev/cdrom $mount_point &> /dev/null
echo "CD光牒被挂載到$mount_point目錄"
else
mkdir -p $mount_point
mount /dev/cdrom $mount_point &> /dev/null
echo "CD光牒被挂載到$mount_point目錄"
fi
fi
本文轉自 北冥有大魚 51CTO部落格,原文連結:http://blog.51cto.com/lyw168/1957406,如需轉載請自行聯系原作者