在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