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



编写脚本,判断光盘是否挂载,显示其挂载点名称;否则由用户输入挂载点名称,挂载光盘 


#!/bin/bash

#


if df -hT | grep sr0 &> /dev/null; then

   mount_point=`df -hT | grep sr0 | awk '{print $NF}'`

   echo "光盘挂载点: $mount_point"

else

   read -p "输入挂载点目录:" mount_point

   if [ -d $mount_point ]; then

      mount /dev/cdrom $mount_point &> /dev/null

      echo "光盘被挂载到$mount_point目录"

   else

      mkdir -p $mount_point

      mount /dev/cdrom $mount_point &> /dev/null

      echo "光盘被挂载到$mount_point目录"

   fi

fi