bash编程初体验(二)

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.

常用选项

  1. -p: 指定读取值时的提示符

  2. -t: 指定读取值时等待的时间,以秒为单位

  3. -r: 允许输入包含反斜杠

  4. -n #: 从输入中读取#个字符,不需要按回车读取

  5. -d: 指定结束定界符

使用示例

[root@centos7 ~#]read -p "please input a word:" Key

wKiom1e1olLABIsdAABAVrj0Jp8294.png

[root@centos7 ~#]read -t 3 Key

wKioL1e1omex-u1kAAB_UDqrVDk451.png

[root@centos7 ~#]read -r KeyI love you \

wKioL1e1on6QWhwiAAB6-DUgylk958.png

[root@centos7 ~#]read -n 5 K

wKiom1e1opngw-WHAADzfyaS2k0074.png

[root@centos7 ~#]read -d":" Key

wKioL1e1or_zQsYBAABTTpnxRN8026.png


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   # 程序结束

wKioL1e1o6TC5oGrAABkNsjLiD8984.png

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

wKiom1e1o_Gx5frWAAB2A0m4sPM847.png

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
~

wKioL1e1pBWz70AaAADpHuOrErg092.png

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

wKioL1e1pFjBvNvcAABHe_FONu4276.png

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

wKioL1e1pTKyOOYJAADDhqRcptY279.png

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

wKiom1e1pZXg22FmAABqKvA3PGw170.png

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

wKioL1e1pz6yjqYRAACPm2vQxXY726.png

if语句暂且告一段落!

止战

2016.8.18

原创文章,作者:Liansir,如若转载,请注明出处:http://www.178linux.com/37428

(0)
上一篇 2016-08-19 08:36
下一篇 2016-08-19 08:36

相关推荐

  • 几个正则表达式和find查找语句事例

    显示当前系统上root、fedora、或user1用户的默认shell; ~]# grep -E "^(root|bin|hadop)" /etc/passwd | cut -d: -f7 找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如: hello(); ~]#grep -E -o &qu…

    Linux干货 2016-10-30
  • HipHop PHP实战(详解web运行模式)

    Note: These code examples assume the HipHop compiler is fully built. 1 . Setting Up Your Environment (构建环境) To get started, you need to configure two environment variables. cd…

    Linux干货 2015-04-10
  • Kickstart+PXE自动部署

    Kickstart+PXE自动部署 无人值守安装简介 无人值守安装(Unattended Setup)指软件安装时无需任何用户干预,直接按默认或通过应答文件设置安装,这对于无特殊需求的用户或企业大批量部署安装操作系统及软件时非常方便。无人值守安装也称为静默安装,在安装过程中可以静默安装好预先设计集成的一些常用软件,安装结束以后软件就已经可以使用,很多软件都支…

    Linux干货 2016-09-17
  • Python函数式编程指南(二):函数

    这是此系列的第二篇,试图说明在Python中如何更好地使用函数并引导诸位使用函数式的思维进行思考。掌握并应用这些内容,就已经是至少形似的函数式风格的代码了,至于思维么,这个真靠自己。 作者水平有限,如有错漏之处还请指出;转载请注明原作者和原地址:) 2. 从函数开始 2.1. 定义一个函数 如下定义了一个求和函数: def add(x, y): return…

    Linux干货 2015-03-11
  • 文件的权限、扩展属性以及facl

    大纲: 一、前言 二、普通权限 三、特殊权限 四、ext文件的扩展属性 五、文件的访问控制列表(facl) 一、前言 linux中常见的权限有读(r)、写(w)、执行(x),还有3个特殊的权限。因此下面就从普通权限开始介绍起 二、普通权限 rwx:读 写 执行 rwxr-xr-x : 读写执行 读_执行 读_执行  (分别对应)属主 属组…

    Linux干货 2015-05-04
  • Linux基础命令与详解(2017后续更新)

    后续陆续更新 命令基础

    Linux干货 2017-11-14

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-19 13:54

    文章对if、case语句的语法有了相应的总结和练习,多些,多练,多看优秀代码。才能写出优秀的脚本。