一、变量的定义及存在的意义
(1)定义本身:变量就是内存一片区域的地址
(2)变量存在的意义:命令无法操作一直变化的目标,用一串固定的字符来表示不固定的目标可以解决此问题
二、shell脚本中变量的定义方法
注意:不同进程之间是不能共享资源的,一个进程中的线程可以使用该进程的资源
1.环境级别
export a=1 %将a=1这个变量设定作为资源共享出来,以至于其它进程也可以使用
在环境关闭后变量失效
2.用户级别
vim ~/.bash_profile
export a=1
%举例如下
[root@test3 mnt]# vim ~/.bash_profile %编辑完需要source执行,否则不会生效
[root@test3 mnt]# sh westos.sh
%所设定的变量无法显示
[root@test3 mnt]# source ~/.bash_profile
[root@test3 mnt]# sh westos.sh
1
3.系统级别
vim /etc/profile %该文件原本存在,在里面添加所需要的设定
export a=2
vim /etc/profile.d/westos.sh %该文件原本不存在,是后来添加的
export b=3
%可以用env指令查看所有的环境变量
%shell提示符:例如[root@test3 mnt]# 也是一个环境变量,可以用echo $PS1查看
[root@test3 mnt]# echo $PS1
[\u@\h \W]\$
%可以用PS1="xxx"设定shell提示符的环境变量,可以exit退出再进入shell即可恢复原来的shell提示符
%通过echo $PATH查看命令执行环境变量,如下所示:
[root@test3 mnt]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin %这串字符串表示你当前的用户能在系统里面直接执行的命令所存储的路径
%更改该路径并测试
[root@test3 mnt]# chmod +x westos.sh
[root@test3 mnt]# vim ~/.bash_profile
[root@test3 mnt]# source ~/.bash_profile
[root@test3 mnt]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin:/root/bin:/root/bin:/mnt
[root@test3 mnt]# cd
[root@test3 ~]# westos.sh %不需要写脚本的绝对路径就可以正确执行脚本
1
三、变量的数组
a=(1 2 3 4 5)
echo ${a[0]} %数组中第一个元素
echo ${a[-1]} %数组中最后一个元素
echo ${a[*]} %数组中所有元素 所有元素整体当作一个字符串
echo ${a[@]} %数组中所有元素 数组中的每个元素都当作一个单独的字符串
echo ${a[@]:0:3} %数组中1-3个元素
echo ${#a[@]} %数组中元素的个数
%抓取IP实验
[root@test3 ~]# ifconfig enp1s0
enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.4.17.100 netmask 255.255.255.0 broadcast 10.4.17.255
inet6 fe80::5054:ff:fe52:ab34 prefixlen 64 scopeid 0x20<link>
ether 52:54:00:52:ab:34 txqueuelen 1000 (Ethernet)
RX packets 28 bytes 14990 (14.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 110 bytes 10902 (10.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@test3 ~]# IP=(`ifconfig enp1s0 | grep -E "inet\>"`)
[root@test3 ~]# echo $IP
inet
[root@test3 ~]# echo ${IP[1]}
10.4.17.100
四、脚本函数及相关脚本练习
(1)定义:程序的别名
设定方式:
WORD()
{
action1
action2
}
WORD 在脚本中就代表action1 action2这两个动作
(2)脚本练习
编写脚本:create_user.sh
sh create_user.sh
"Please input username:westos"
westos exist ------<output>----->westos is exist----->please input username:
westos not exist -----please input password:无回显密码
此用户会自动建立并且密码为提示后设定的密码
并显示:westos is created
并再次提示please input username:
当please input username:exit
此脚本退出
(3)脚本书写思路
1、判定exit退出
[ "$USERNAME" = "exit" -o "$USERNAME" = "EXIT" ] && {
echo bye
exit
}||{
进入判定用户是否存在
}
2、判定用户是否存在
用户存在显示返回判定exit
id 用户名称变量 &> /dev/null && {
echo 用户存在
判定exit
}
用户不存在建立用户返回判定exit
||{
显示 please input password:
建立用户
更改密码
显示用户建立成功
判定exit
}
(4)脚本内容
#!/bin/env bash
EXIT()
{
read -p "please input username: " USERNAME
[ "$USERNAME" = "exit" -o "$USERNAME" = "EXIT" ] && {
echo bye
exit
}||{
USER_ACTION $USERNAME
}
}
USER_ACTION()
{
id $1 &> /dev/null && {
echo "$1 is exist !!"
EXIT
}||{
read -p "please input password: " -s PASSWD
echo ""
useradd $1
echo $PASSWD | passwd --stdin $1 &> /dev/null && echo $1 is created
EXIT
}
}