Shell脚本(三)-Shell中的变量、函数及read命令

在Shell脚本中,通常需要在Shell命令使用其他数据来处理信息。这就需要使用变量来实现,变量可以将信息临时存储在Shell运行环境中,以便和脚本中的其他命令一起使用。

变量的类型

系统变量:系统变量通常写在/etc/profile或/etc/profile.d中,对所有用户生效
用户变量:用户变量通常写在用户的个人配置文件中,只对当前用户生效
环境变量:环境变量只在当前Shell中生效,Shell关闭则变量消失

变量命名规则

命名只允许使用英文字母、数字和下划线,首字符不能为数字
中间不能有空格,可以使用下划线(_)
不能使用标点符号

特殊字符的含义

\                ##转译单个字符
""                ##弱引用,批量转译""中出现的字符,不能转译 \ ` ! $
''                ##强引用,批量转译''中出现的字符
``                ##将''中命令的输出信息,赋值给变量,同 $()
${}                ##变量声明,在需要时,用来确定变量边界

$?                ##是命令在执行完成后产生的退出值,当$?=0时表示命令没有错误输出

位置变量

$$                ##当前进程ID
$0                ##脚本本身
$1                ##第一个参数
$2                ##第二个参数
$3                ##第三个参数
$#                ##参数总个数
$*                ##所有参数,全部参数合为一个字符串
$@                ##所有参数,每个参数为独立的字符串

read命令

read命令是实现交互式shell脚本的命令,将输入的内容传递至相关变量,供shell脚本使用
-s            ##加密,不显示
-p "打印内容"  ##打印提示语

示例:
[root@desktop shell]# vim ip_check.sh
#!/bin/bash                                    ##声明解释器为bash
read -p "Please input a IP address: " IP       ##显示提示信息,将用户输入内容传递至变量IP
ping -c1 -w1 $IP &> /dev/null                  ##ping $IP地址一次,将输出内容丢进垃圾箱
[ $? = 0 ] && {                                ##如果$?值为0,表示没有错误输出,&&条件成立,则
        echo "$IP is up"                       ##显示 $IP is up
        exit 0                                 ##退出脚本
} || {                                         ##||条件不成立,则
        echo "$IP is down"                     ##显示 $IP is down
        exit 1                                 ##退出脚本
}

[root@desktop shell]# sh ip_check.sh
Please input a IP address: 172.25.254.80
172.25.254.80 is up
[root@desktop shell]# sh ip_check.sh
Please input a IP address: 192.168.0.1
192.168.0.1 is down

函数

脚本中的函数,是把一个复杂的语句,定义成一个字符串的方法
创建一个脚本来测试函数的作用
[root@desktop shell]# vim user_ctrl.sh
#!/bin/bash
USER_ADD()        ##定义USER_ADD函数
{
        read -p "Please input username: " USERADD
        useradd $USERADD && {
                read -s -p "Please input a Password: " PASSWORD
                echo $PASSWORD | passwd --stdin $USERADD
                }
}

USER_DEL()        ##定义USER_DEL函数
{
        read -p "Please input need to del username: " USERDEL 
        userdel -r $USERDEL && echo deleted succeesfully!
}

ACTION()          ##定义ACTION函数
{
        read -p "Please input you Action(list:l) : " Action    ##用户输入内容为变量Action值
        [ $Action = l ] && echo Action : add del exit          ##变量Action = l 时,执行echo
        [ $Action = exit ] && exit 0     ##变量Action = exit时,退出,退出值=0
        [ $Action = add ] && USER_ADD    ##变量Action = add时,执行函数USER_ADD
        [ $Action = del ] && USER_DEL    ##变量Action = del时,执行函数USER_DEL
        ACTION                           ##执行ACTION
}
ACTION                                   ##函数名直接调用函数块内容

测试脚本:
[root@desktop shell]# sh user_ctrl.sh     ##运行脚本
Please input you Action(list:l) : l       ##输入l
Action : add del exit
Please input you Action(list:l) : add     ##输入add
Please input username: user1
useradd: user 'user1' already exists
Please input you Action(list:l) : add
Please input username: user2
Please input a Password: Changing password for user user2.
passwd: all authentication tokens updated successfully.
Please input you Action(list:l) : del     ##输入del
Please input need to del username: user1
deleted succeesfully!
Please input you Action(list:l) : exit
[root@desktop shell]# su - user1          ##user1被成功删除
su: user user1 does not exist
[root@desktop shell]# su - student
Last login: Thu Jun 21 09:32:41 EDT 2018 on pts/0
[student@desktop ~]$ su - user2           ##user2被成功创建,并且密码正确
Password: 
Last login: Thu Jun 21 09:52:58 EDT 2018 on pts/0

猜你喜欢

转载自blog.csdn.net/xin1889/article/details/80756218