bash编程初体验(二)
-
read
-
if
-
case
概述
在本篇文章中,我们将介绍bash编程中有关if语句的简单用法,if语句的基本思路是判断给定的条件是否满足,即结果是真还是假,从而选择执行哪种操作。如此,如果条件为真,if会执行一种指令,如果条件为假,if会选择执行另一种指令,这种执行就是所谓的选择结构,它能够改变命令的基本顺序流结构,以选择流的形式运行。
在有关if语句的论述中,我们还将介绍read命令,因为read命令可以方便地引入一个或多个变量,可以天然地与if语句结合;另外,除了if语句,还有一种常见的选择语句:case语句,其简单易用,高效简洁,是在一组可能的值中评估一个或多个变量时的不二选择。当然,case语句可以与if语句嵌套。
read
主要用途
读取变量
Read a line from the standard input and split it into fields.
read命令可以一次读取一个或多个变量的值,变量和输入的值都需要空格隔开;如果没有指定变量名,读取的变量将被自动赋值给特定的变量REPLY.
常用选项
-
-p: 指定读取值时的提示符
-
-t: 指定读取值时等待的时间,以秒为单位
-
-r: 允许输入包含反斜杠
-
-n #: 从输入中读取#个字符,不需要按回车读取
-
-d: 指定结束定界符
使用示例
[root@centos7 ~#]read -p "please input a word:" Key
[root@centos7 ~#]read -t 3 Key
[root@centos7 ~#]read -r KeyI love you \
[root@centos7 ~#]read -n 5 K
[root@centos7 ~#]read -d":" Key
if
if是一种结构化语句,bash shell中的if语句运行在if行定义的命令,如果命令的退出状态码为0,将执行then后的所有命令,如果命令的退出状态码为其它值,则不会执行then后的语句,而是直接跳到下一条语句。
if语句简介:
单分支#!/bin/bash #if COMMANDthen COMMANDSfi--------------------------------------------------------------------------- 双分支#!/bin/bash#if COMMANDthen COMMANDSelse COMMANDSfi-------------------------------------------------------------------------- 多分支#!/bin/bash#if COMMANDthen COMMANDSelif COMMANDSelif COMMANDSelse COMMANDSfi
case语句
case语句,适用于某种条件判断,如在一组数据中评估一个或多个变量的值。case支持glog风格的通配符,
*: 任意长度任意字符 ?: 任意单个字符 []: 指定范围内的任意单个字符 a|b: a或b
case语句简介:
case 变量引用 in PART1) 分支1 ;; PART2) 分支2 ;; PART3) 分支3 ;; ... *) 默认分支 ;; esac
练习
1.写一个脚本/root/bin/createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等信息。
[root@centos7 ~/bin#]vim createuser.sh 1 #!/bin/bash 2 # 3 # Add a user:以用户名为参数,存在即显示其存在,不存在则添加,并显示其id等信息 4 if [ $# -lt 1 ] # 符合条件则执行then,否则执行else 5 then 6 echo "please input one USERNAME: $0 USERNAME" 7 exit 1 8 else 9 id $1 &> /dev/null # 符合条件则进行下一个if判断,此处为if嵌套 10 if [ $? -eq 0 ]; then 11 echo "The user is exist." 12 elif [ $? -ne 0 ]; then 13 useradd $1 && echo "add a $1" 14 id $1 15 fi 16 fi # 程序结束
2.写一个脚本/root/bin/yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或是其它信息。
1 #!/bin/bash 2 # 3 # 输入yes or no 并显示之 4 read -p "please input a yes or no!" KEY # 通过read 引入了变量Key 5 case $KEY in 6 [Yy][Ee][Ss]|[Yy]) # 在一组数值中评估Key变量 7 echo "yes" 8 ;; 9 [Nn][Oo]|[Nn]) 10 echo "no" 11 ;; 12 *) 13 echo "please again" 14 ;; 15 esac
3.写一个脚本/root/bin/filetype.sh,判断用户输入文件路径,显示其文件类型(普通,目录,链接,其它文件类型)
1 #!/bin/bash 2 # 3 #判断文件类型 4 5 if [[ $# -lt 1 ]] 6 then 7 echo "please input a FILENAME: $0 fILENAME" 8 else 9 file -b $1 10 fi ~
if与case的嵌套:
1 #!/bin/bash 2 # 3 # 判断文件类型 4 5 if [[ $# -lt 1 ]] 6 then 7 echo "please input a FILENAME: $0 FILENAME" 8 else 9 Key=`ls -l $1 |cut -c1` 10 case $Key in # 注意要写成$Key 而非Key 11 l) 12 echo "link file" 13 ;; 14 -) 15 echo "common file" 16 ;; 17 d) 18 echo "directory file" 19 ;; 20 t) 21 echo "sticky directory" 22 ;; 23 *) 24 echo "other file" 25 ;; 26 esac 27 fi
4.试判断一个整数
#!/bin/bash # #判断是否为整数,第4行可简写为 let var=$1,然后第11与12行可移到第二个if嵌套 #该脚本对输入为字母的情况会有错误信息输出,但不影响判断脚本 #要想解决此问题,可试用grep [[ $# -eq 0 ]] && echo "please input a integer." && exit 1 (int=$(expr $1 + $1)) &> /dev/null if [ $? -eq 0 ]; then if [ $1 -gt 0 ]; then echo "$1 is a positive integer." else echo "$1 is a negative integer." fi elif [ $1 -eq 0 ];then echo "$1 is a 0" else echo "$1 is not a integer." fi
5.写一个脚本/root/bin/createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等信息.
#!/bin/bash # # Add a user:以用户名为参数,存在即显示其存在,不存在则添加,并显示其id等信息 if [ $# -lt 1 ]then echo "please input one USERNAME: $0 USERNAME" exit 1 else id $1 &> /dev/null if [ $? -eq 0 ]; then echo "The user is exist." elif [ $? -ne 0 ]; then useradd $1 && echo "add a $1" id $1 fi fi
6.给出一个系统菜单,打印出硬盘、内存、cpu信息
#!/bin/bash # cat <<EOF disk) show disk info mem) show memory info cpu) show cpu info *) quit EOFread -p "Please input your choice: " choice if [[ "$choice" == 'disk' ]] then fdisk -l elif [[ "$choice" == 'mem' ]] then free -m elif [[ "$choice" == 'cpu' ]] then lscpu else echo "Unknow choice" exit 3 fi
7.判断用户类别
#!/bin/bash # [ $# -lt 1 ] && echo "Please input one user: " && exit 1 ! id $1 && echo "No such user." && exit 2 id_user=$(id -u $1) if [ $id_user -eq 0 ] then echo "root" elif [ $id_user -ge 1000 ] then echo "login user" else echo "system user" fi
if语句暂且告一段落!
止战
2016.8.18
原创文章,作者:Liansir,如若转载,请注明出处:http://www.178linux.com/37428
评论列表(1条)
文章对if、case语句的语法有了相应的总结和练习,多些,多练,多看优秀代码。才能写出优秀的脚本。