shell中的if 和case两个条件语句
1. if的语法1:
if
条件
then
commands
else
commands
fi
if的语法2:
语法:if 条件
then
commands
elif 条件
then
commands
elif 条件
then
commands
....
else
commands
fi
说明:read 是读取用户输入的一行
if语句的一些说明
首先:if 条件1
then
commands
elif 条件2
then
commands
elif 条件3
then
commands
....
else
commands
fi
中的条件1,2,3等,都是同等地位的,也就是相当于条件1不满足,则看条件2,条件1、2都不满足,则看条件3 以此往下推(-a 为and的意思,但是不能用&&替代,否则会报错,-o 为or意思)。
case条件语句:
语法: case 条件 in
xxx)
commands;;
xxx)
commands;;
xxx)
commands;;
esac
说明:这个esac 就是case的结束,想if...fi 一样的,
注意commands;; 中的“;;”不能少掉。
例子
1、 写一个脚本 /root/bin/createuser.sh ,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的 id 号等信息
[root@localhost bin]# cat createuser.sh
#!/bin/bash
# Date: 2016.8.12
# Author: cyh
# Description: Determine whether a user exists
user=`cut -d: -f1 /etc/passwd |grep -o "$1"`
[ $# -ne 1 ] && exit 1
if [[ -n $user ]]; then
echo "User already exists!"
echo "The user information: `grep "^$1\>" /etc/passwd |cut -d: -f 1,3`"
else
useradd $1 > /dev/null
echo "The user has been created!"
echo "The user information: `grep $1 /etc/passwd |cut -d: -f 1,3`"
fi
脚本测试
[root@localhost bin]# getent passwd tom
[root@localhost bin]# createuser.sh tom
The user has been created!
The user information: tom:2028
[root@localhost bin]# getent passwd tom
tom:x:2028:2033::/home/tom:/bin/bash
[root@localhost bin]#
[root@localhost bin]# getent passwd zhangsan
zhangsan:x:2022:2024::/home/zhangsan:/bin/bash
[root@localhost bin]# createuser.sh zhangsan
User already exists!
The user information: zhangsan:2022
2 、写一个脚本 /root/bin/yesorno.sh ,提示用户输入 yes 或 no, 并判断用户输入的是 yes 还是 no, 或是其它信息
[root@localhost bin]# cat yesorno.sh
#!/bin/bash
# Description: Determine the user input characters(yes or no).
read -t5 -p "Please input yes or no: " ans
[ -z $ans ] && echo "You have no input, script has quit" && exit 10
case $ans in
[yY][eE][sS]|y|Y)
echo "Input is yes!"
;;
[nN][oO]|n|N)
echo "Input is no!"
;;
*)
echo "Input error, please enter again."
;;
esac
脚本测试
[root@localhost bin]# yesorno.sh
Please input yes or no: y
Input is yes!
[root@localhost bin]# yesorno.sh
Please input yes or no: yEs
Input is yes!
[root@localhost bin]# yesorno.sh
Please input yes or no: nO
Input is no!
[root@localhost bin]# yesorno.sh
Please input yes or no: n
Input is no!
[root@localhost bin]# yesorno.sh
Please input yes or no: tt
Input error, please enter again.
3 、写一个脚本 /root/bin/filetype.sh, 判断用户输入文件路径,显示其文件类型(普通,目录,链接,其它文件类型)
[root@localhost bin]# cat filetype.sh
#!/bin/bash
# Author: cyh
# Date: 2016.8.15
# Description: Input a file, and determine the type of the file
if [ $# -ge 1 ]; then
if [ -z $1 ]; then
echo "Your input is empty"
elif [ -d $1 ]; then
echo "this is a directory."
elif [ -h $1 ]; then
echo "this is a link file."
elif [ -f $1 ]; then
echo "this is a common file."
elif [ -c $1 ]; then
echo "this is a character device file."
elif [ -b $1 ]; then
echo "this is a block device file."
elif [ -s $1 ]; then
echo "this is a socket file."
elif [ -p $1 ]; then
echo "this is a pipe file."
else
echo "The input character is empty or file does not exist,please specify again."
fi
else
read -t 10 -p "Please input file name: " file
[[ ! -e $file || -z $file ]] && echo "The input is empty or file does not exist,please specify again." && exit
type=`ls -ld $file 2> /dev/null | cut -c1`
case $type in
d)
echo "this is a directory."
;;
-)
echo "this is a common file."
;;
l)
echo "this is a link file."
;;
s)
echo "this is a socket file."
;;
c)
echo "this is a character device file."
;;
b)
echo "this is a block device file."
;;
p)
echo "this is a pipe file."
;;
*)
echo "this not is file."
esac
fi
脚本测试
[root@localhost bin]# filetype.sh dfdfd
The input character is empty or file does not exist,please specify again.
[root@localhost bin]# filetype.sh /var
this is a directory.
[root@localhost bin]# filetype.sh /var/log/
this is a directory.
[root@localhost bin]# filetype.sh /var/log/messages
this is a common file.
[root@localhost bin]# filetype.sh /tmp/cat
this is a link file.
[root@localhost bin]# filetype.sh /tmp/hogsuspend
this is a pipe file.
[root@localhost bin]# filetype.sh /var/log/messages21
The input character is empty or file does not exist,please specify again.
[root@localhost bin]# filetype.sh
Please input file name: dfsdfsfq2
The input character is empty or file does not exist,please specify again.
[root@localhost bin]# filetype.sh
Please input file name: /etc/fstab
this is a common file.
[root@localhost bin]# filetype.sh
Please input file name: /tmp/cat
this is a link file.
[root@localhost bin]# filetype.sh
Please input file name: /tmp/hogsuspend
this is a pipe file.
4 、写一个脚本 /root/bin/checkint.sh, 判断用户输入的参数是否为正整数
[root@localhost bin]# cat checkint.sh
#!/bin/bash
#
read -p "Please input an integer:" integer
#[ $integer -lt 0 ] && echo "Please enter at least one value" && exit 10
if [[ $integer =~ ^0*[0-9][0-9]*$ ]]; then
echo "this is an integer"
else
echo "this not an integer"
fi
脚本测试
[root@localhost bin]# checkint.sh
Please input an integer:12
this is an integer
[root@localhost bin]# checkint.sh
Please input an integer:3.14
this not an integer
[root@localhost bin]# checkint.sh
Please input an integer:df
this not an integer
[root@localhost bin]# checkint.sh
Please input an integer:09
this is an integer
[root@localhost bin]# checkint.sh
Please input an integer:9f
this not an integer