天天看點

shell邏輯控制語句之if

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,如需轉載請自行聯系原作者

繼續閱讀