shell 中的变量

变量的定义

变量即在程序运行过程中它的值是允许改变的量。
变量是用一串固定的字符来标示不固定的值的一种方法。
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 Script 运行时可更改的程序信息。
在 shell 中变量是不能永久保存在系统中的,必须在文件中声明。

变量的种类及定义方法

在 shell 中变量分为环境级变量,用户级变量,系统级变量:
环境级变量只在当前 shell 中生效, shell 关闭变量丢失
未声明之前,只在当前shell中生效:
shell 中的变量
声明:export redhat=1,声明之后,在所有shell中生效:
shell 中的变量
用户级变量写在用户的骨文件中,只针对当前用户生效
su - 切换用户,读取bashrc和profile,读取用户环境 profile 环境信息 bash shell配置
su 切换用户,只读取bash,不读取用户环境
vim ~/.bash_profile
export a=10
shell 中的变量
未声明之前,环境文件中写的配置不起作用:
shell 中的变量
声明之后,只对应用当前用户环境的用户生效:
source ~/.bash_profile
shell 中的变量
要想删除用户级变量,只需将环境文件中的配置信息删掉,之后再声明一下,就可以重新定义变量:
shell 中的变量
shell 中的变量
系统级变量被写在系统的配置文件 /etc/profile 或者 /etc/profile.d/ 中,对于所有用户都生效
vim /etc/profile
export b=123
shell 中的变量
未声明之前,环境文件中写的配置不起作用,声明之后,对所有的用户都生效:
shell 中的变量
要想删除系统级变量,操作和删除用户级变量一样。

变量名称的规范

变量名称中通常包含大小写字字母,数字,下划线(不是必须)
变量名称格式:
WESTOS_LINUX
Westos_Linux
westoS_Linux

脚本的直接运行

我们自己写的脚本,运行的时候要以绝对路径运行,而系统的脚本就不用以绝对路径来运行,可以直接运行,要想我们写的脚本也可以像系统脚本一样直接运行,需要以下操作:
修改环境文件:
vim ~/.bash_profile
shell 中的变量
echo $PATH #查看默认执行目录
source ~/.bash_profile #声明
echo $PATH
chmod +x /mnt/qq/ip_show.sh #添加执行权限
ip_show.sh
shell 中的变量

for循环语句

在/mnt/userfile中写入三个用户名,写一个脚本,该脚本可以以/mnt/userfile中的三个用户名创建三个用户:
vim /etc/userfile
shell 中的变量
vim /etc/create_user.sh
[ “$ USER” != “root” ] && { #先判定用户是否为root用户
echo -e “\033[31mError: This script is run with root!!\033[0m”
exit 0
}
[ -z “$ 1” ] && { #判定后面是否跟了一个文件名
echo -e “\033[31mError: Please input userfile following script\033[0m”
exit 0
}
[ -e “$ 1” ] || { #判定文件是否存在
echo -e “\033[31mError: $ 1 is not exist!!\033[0m”
exit 0
}
for NAME in cat $ 1 #注意:此处的符号应为Tab上面的那个点
do
useradd $ NAME &> /dev/null && { #创建用户
echo -e “\033[32m $ NAME is created\033[0m”
}||{ #判定用户是否已经存在
echo -e “\033[31m$NAME is exist\033[0m”
}
done
shell 中的变量
脚本运行:
shell 中的变量

字符的转译及变量的声明

\ 转译单个字符
“” 弱引用,批量转译 “” 中出现的字符,
‘’ 强引用,批量转译 ‘’ 中出现的字符
‘’ 与 “” 两者的区别在于, “” 不能转译 “”,"`","!","$"
${} 变量声明
变量值传递
$1 脚本后的第一串字符串
$2 脚本后的第二串字符串
$3 脚本后的第三串字符串
$# 脚本后所跟字符串的个数
$* 脚本后跟的所有字符串,模式为“ 1 2 3 ”
&@ 脚本后跟的所有字符串,模式为“ 1”“2”“3”
shell 中的变量

用 read 实现变量传递

read WESTOS
read -s WESTOS #输入的信息不会回显出来
read -p “input: " WESTOS #输入的信息会显示出来
编写一个脚本,输入-d时,再输入一个用户名,此用户将被删除;输入-c时,将创建一个用户,然后输入用户名和密码;输入其他字符时,报错:
[ “$ 1” = “-d” ] && { #判定是否为-d
echo -e “\033[44mPlease input username:\033[0m”
read -p “Please input username:” NAME #输入用户名
userdel -r $ NAME &>/dev/null && { echo -e “\033[31m$ NAME will delete\033[0m” #删除用户,如果用户存在,则删除
exit 0
} || { echo “$ NAME does not exist!!!” #如果用户不存在,则报错
exit 0
}
}
[ " $ 1” = “-c” ] && {
echo -e “\033[44mPlease input username:\033[0m”
read -p “Please input username:” MING #输入用户名
echo -e “\033[44mPlease input password:\033[0m”
read -p “Please input password:” -s PASSWD #输入用户密码
useradd $ MING #创建用户
echo $ PASSWD | passwd --stdin $ MING #上传密码
exit 0
}||{ echo -e “\033[31mPlease input -d|-c following userctrl.sh\033[0m” #判定为其他字符时,报错}
shell 中的变量
shell 中的变量

linux 系统中命令别名的设定

alias 查看已添加的别名
环境级:alias
alias xie=‘vim’ #可直接使用,退出环境之后会消失
alias
unalias xie #删除添加的别名
shell 中的变量
shell 中的变量
只在当前shell中生效,不在其他shell中生效:
shell 中的变量
退出重新进入会消失:
shell 中的变量
用户级:vim ~/.bashrc
alias xie=‘vim’
shell 中的变量
source /root/.bashrc
alias #只有这个用户添加了这个别名,切换到其他用户没有
shell 中的变量
shell 中的变量
要想删除用户级别名,只需将文件中的配置信息删掉,再输入unalias xie:
shell 中的变量
shell 中的变量
系统级:vim /etc/bashrc
alias xie=‘vim’
shell 中的变量
source /etc/bashrc
alias
shell 中的变量
shell 中的变量
删除系统级别名,操作和删除用户级别名一样:
shell 中的变量

利用命令执行结果设定变量

Hostname=$(hostname)
Hostname=hostname
$?
$? 是命令在执行完成之后产生的退出值
范围是 [0-255]
当 $0=0 时标示命令执行没有错误输出
这个值可以用 exit 命令执行 .
例如 exit 66
vim ip_show.sh
shell 中的变量
echo $?
sh ip_show.sh
echo $?
shell 中的变量

脚本中的函数

脚本中的函数时把一个复杂的语句块定义成一个字符串的方法
用函数写一个添加用户脚本,如果用户已经存在,则报错,反之,则创建用户,并上传密码:
CREATE()
{
echo -e “\033[32mPlease input username:\033[0m”
read -p “Please input username:” NAME
[ “$ NAME” = “exit” ] &&{ #判断输出,如果为exit,则退出脚本的执行
echo bye
exit 0
}||{
useradd $ NAME &> /dev/null ||{ #判定用户是否存在,如果存在,则报错
echo -e “\033[31m$NAME is exist\033[0m”
CREATE
}
}
{
echo -e “\033[32mPlease input password:\033[0m” #如果不存在,创建用户成功,并 上传密码
read -p “Please input password:” -s PASSWD
echo $PASSWD | passwd --stdin $NAME
CREATE
}
}
CREATE
shell 中的变量
脚本运行结果:
shell 中的变量

上一篇:【Shell】公共类-logger


下一篇:ElasticSearch实战系列十: ElasticSearch冷热分离架构