if语句  
 单分支  
if  < 条件表达式> 
then 指令
fi 
  
if  < 条件表达式> ; then 指令
fi 
  
 案例  
编写脚本choice1.sh,利用单分支 结构实现输入2个整数,判断最大值后输出($符相当于取值符号)   
[ root@server ~] 
read  -p  "请输入第一个整数: "  x
read  -p  "请输入第二个整数: "  y
max = $x 
if  (( $max< $y))  
then     max = $y 
fi       [ root@server ~] 
请输入第一个整数:6
请输入第二个整数:3
最大值:6
  
编写脚本choice3.sh ,判断当前脚本的执行者身份,若不是root账户执行则输出提示,并退出   
[ root@server ~] 
root
[ root@server ~] 
0 
[ root@server ~] 
root
[ root@server ~] 
0 
  
[ root@server ~] 
if  [  "$USER "  !=  "root"  ] 
then echo  "please switch user root" 
fi [ root@server ~] 
[ root@server ~] 
[ fox@server root] $ cd   /
[ fox@server /] $ bash   choice3.sh 
please switch user root
  
 双分支  
if  < 条件表达式> 
then 指令序列1
else 指令序列2
fi 
  
 案例  
面试题:编写脚本choice2.sh,使用双分支 判断当前系统的剩余内存大小,若低于100M则发送消息进行告警   
[ root@server ~] 
free_mem = $( free  -m  |  grep  Mem |  tr  -s  " "  |  cut  -d  " "  -f  4 )  
if  (( $free_mem< 100 ))  
then echo  "警告,剩余内存为:$free_mem ,低于100MB" 
else echo  "剩余内存为:$free_mem ,空间足够" 
fi [ root@server ~] 
剩余内存为:948,空间足够
  
编写脚本choice4.sh , 实现闰年的判断(闰年:能被4整除但不能被100整除或者能被400整除的年份 )   
[ root@server ~] 
read  -p  "请输入四位数年份:"  year
if  [  $(( $year% 4 ))   -eq  0  ]  &&  [  $(( $year% 100 ))   -ne  0  ]  ||  [  $(( $year% 400 ))   -eq  0  ] 
then echo  "$year 年是润年" 
else echo  "$year 年是平年" 
fi [ root@server ~] 
请输入四位数年份:2018
2018 年是平年
[ root@server ~] 
请输入四位数年份:2024
2024 年是润年
  
编写脚本choice5.sh,判断sshd是否运行   
[ root@server ~] 
[ root@server ~] 
  
[ root@server ~] 
num = $( ps   -ef  |  grep   sshd |  grep  -v  grep  |  wc  -l )  
if  (( $num> 0 ))  
then echo   "sshd is running" 
else echo   "sshd is not running" 
fi [ root@server ~] 
sshd is not running
  
 
[ root@server ~] 
read  -p  "请输入测试主机的IP地址:"   ip 
ping   -c  2  -w  3  $ip   &>  /dev/null
if  [  $?  -eq  0  ] 
then echo   "主机$ip 已运行" 
else echo   "主机$ip 未运行" 
fi [ root@server ~] 
请输入测试主机的IP地址:192.168.80.130
主机192.168.80.130未运行
  
for  ip   in  192.168 .48.{ 125 .. 135 } 
do ping   -c  2  -w  3  $ip   &>  /dev/nullif  [  $?  -eq  0  ] then echo   -e  "\e [1;31m主机$ip 已运行\e [0m" else echo   "主机$ip 未运行" fi 
done     
  
 多分支  
if  条件表达式1
then 指令序列1
elif  条件表达式2
then 指令序列2
else 指令序列n
fi 
  
编写脚本choice6.sh , 输入百分制成绩,判断后输出等级成绩   
[ root@server ~] 
read  -p   "请输入百分制成绩: "   score
if  [  -z  $score  ]       
then echo   "未输入,请重新输入." 
elif   (( $score< 0  ||  $score> 100  ))  
then echo   "成绩输入有误,请输入0-100间整数成绩" 
elif   (( $score >=  90 ))  
then echo  "成绩优秀" 
elif    (( $score >= 80 ))  
then echo   "成绩良好" 
elif    (( $score>= 60 ))  
then echo   "成绩及格" 
else echo   "补考" 
fi [ root@server ~] 
请输入百分制成绩:
未输入,请重新输入
[ root@server ~] 
请输入百分制成绩:100
成绩优秀
  
编写脚本choice7.sh,判断主机的cpu品牌   
[ root@server ~] 
processor       :  0 
vendor_id       :  GenuineIntel
cpu family      :  6 
model           :  186 
model name      :  13th Gen Intel( R)  Core( TM)  i7-13620H
stepping        :  2 
microcode       :  0x410e
cpu MHz         :  2918.399 
cache size      :  24576  KB
physical id      :  0 
siblings        :  2 
core id          :  0 
cpu cores       :  2 
apicid          :  0 
initial apicid  :  0 
fpu             :  yes 
fpu_exception   :  yes 
cpuid level     :  32 
wp              :  yes 
flags           :  fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves avx_vnni arat umip pku ospke gfni vaes vpclmulqdq rdpid movdiri movdir64b fsrm md_clear serialize flush_l1d arch_capabilities
bugs            :  spectre_v1 spectre_v2 spec_store_bypass swapgs itlb_multihit eibrs_pbrsb
bogomips        :  5836.79 
clflush size    :  64 
cache_alignment :  64 
address sizes   :  45  bits physical, 48  bits virtual
power management:processor       :  1 
vendor_id       :  GenuineIntel
cpu family      :  6 
model           :  186 
model name      :  13th Gen Intel( R)  Core( TM)  i7-13620H
stepping        :  2 
microcode       :  0x410e
cpu MHz         :  2918.399 
cache size      :  24576  KB
physical id      :  0 
siblings        :  2 
core id          :  1 
cpu cores       :  2 
apicid          :  1 
initial apicid  :  1 
fpu             :  yes 
fpu_exception   :  yes 
cpuid level     :  32 
wp              :  yes 
flags           :  fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves avx_vnni arat umip pku ospke gfni vaes vpclmulqdq rdpid movdiri movdir64b fsrm md_clear serialize flush_l1d arch_capabilities
bugs            :  spectre_v1 spectre_v2 spec_store_bypass swapgs itlb_multihit eibrs_pbrsb
bogomips        :  5836.79 
clflush size    :  64 
cache_alignment :  64 
address sizes   :  45  bits physical, 48  bits virtual
power management:[ root@server ~] 
vendor_id       :  GenuineIntel
vendor_id       :  GenuineIntel[ root@server ~] 
vendor = $( grep   "vendor_id"   /proc/cpuinfo |  uniq  |  cut  -d  " "  -f2 )  
if  [  $vendor  ==  GenuineIntel ] 
then echo   "Inter" 
elif  [  $vendor  ==  GenuineAMD ]   
then echo   "AMD" 
else echo   "unknow" 
fi [ root@server ~] 
Inter
  
编写脚本choice9.sh,根据用户的输入内容,判断是数字、字母、其它字符   
[ root@server ~] 
read  -p   "请输入字母、数字、其它字符: "  str
if  echo  $str  |  grep  [ a-zA-Z]   >   /dev/null
then echo   "字母" 
elif   echo   $str  |  grep  [ 0 -9]   >  /dev/null
then echo   "数字" 
else echo   "字符" 
fi [ root@server ~] 
请输入字母,数字,其他字符:890
数字
[ root@server ~] 
请输入字母,数字,其他字符:adg
字母
[ root@server ~] 
请输入字母,数字,其他字符:! @
字符
  
 case多条件判断  
 格式  
case  变量名 in 值1) 指令1; ; 值2) 指令2; ; 值3) 指令3 ; ; *)默认 
esac       
  
 执行过程  
case语句会将该变量的值 与 )括号中的值相比较  ,如果与某个值相等,则执行对应语句。  当遇到“;;”符号 时,就跳出case语句 ,执行esac语句后面的语句。  如果没有与任何一个值相匹配 ,则执行*)后面的一组语句    
 示例  
编写脚本choice10.sh,对上例7的百分制成绩判断等级成绩进行改写   
[ root@server ~] 
read  -p  "请输入百分制成绩: "  score
case  $score  in 9 [ 0 -9] | 100 ) echo  "成绩优秀" ; ; 8 [ 0 -9] ) echo   "成绩良好" ; ; 6 [ 0 -9] | 7 [ 0 -9] ) echo   "成绩及格" ; ; *) echo   "补考" 
esac [ root@server ~] 
请输入百分制成绩:99
成绩优秀
[ root@server ~] 
请输入百分制成绩:9
补考