1 变量
定义:变量就是内存一片区域的地址
变量存在的意义:命令无法操作一直变化的目标,用一串固定的字符来表示不固定的目标
2 shell脚本中变量的定义方法
(1)环境级别:在环境关闭后变量失效
(2)用户级别:变量只对当前用户生效
- 编辑配置文件:
~/.bash_profile
- 使修改的配置文件立即生效:
source ~/.bash_profile
(3)系统级别:只对系统的所有用户生效
-
编辑配置文件:
vim /etc/profile
-
使修改的配置文件立即生效:
source /etc/profile
3 变量名的命名规则
1- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
2- 中间不能有空格,可以使用下划线 ”_"
3- 不能使用标点符号
4- 不能使用bash里的关键字(可用help命令查看保留关键字)
建议:
变量名称短全用大写字符
变量名称长用_区分子类
4 变量的转译
(1)转译
\ ## 转译单个字符
"" ## 弱引用,批量转译个数字符 不能转译"\" "`" "$" "!"
'' ## 强引用
(2)变量的声明
(3)变量的数组
测试题:编写脚本,脚本执行时userfile文件中的用户会被全部建立
思路:
(1)执行脚本的用户是不是root用户
(2)执行脚本时是否跟文件的名字
(3)文件是否存在
(4)文件中的用户是否已经存在
#!/bin/bash
[ "$USER" = "root" ] || {
echo please run script with root!!! ##运行脚本的用户不是root时退出
exit
}
[ -z $1 ] && {
echo please username following script!! ##执行脚本时是否跟文件的名字
exit
}
[ -e "$1" ] ||{
echo "$1 file is not exit!!" ##文件存在退出
exit
}
for USERNAME in $(cat $1) ##判断读取的用户名单中的用户是否已经存在
do
id $1 &>/dev/null &&{
echo "$1 is exit!!" ##用户已存在提示用户已经存在
}||{
useradd $USERNAME ##用户不存在时创建用户
echo "$USERNAME is created!!"
}
done
5 Linux中命令的别名设定
(1)临时设定:alias xie='vim'
(2)针对指定用户生效
- 编辑用户家目录下的配置文件:
vim ~/.bashrc
,设定只对该用户生效
- 使更改生效:
source ~/.bashrc
(3)设定针对系统中的所有用户生效
- 编辑系统配置文件:
vim /etc/bashrc
- 使更改生效:source /etc/bashrc
(4)删除当前环境中的alias
- 删除当前环境中的alias:
unalias xie
6 用户环境变量的更改
环境变量:用户在操作系统时使用到的命令搜索路径
(1)针对设定的用户生效
- 编辑用户的配置文件:
~/.bash_profile
- 刷新配置文件:
source ~/.bash_profile
- 测试结果:设定仅针对特定用户生效
(2)针对系统中的所有用户生效
- 编辑配置文件:
vim /etc/bash_profile
- 刷新配置文件:
source /etc/bash_profile
- 测试效果:设定针对系统所有的用户生效
7 利用命令的执行结果设定变量
(1)直接利用命令执行结果
$()|`` ##优先执行
(2)脚本中的传参
- 非交互模式
-
交互模式传参:
read INPUT ##对westos赋值 read -p "please input word:" ##输出提示语 -s ##隐藏输入内容
输入用户名和密码,其中输入的密码不显示:
#!/bin/bash
read -p "please input username:" USERNAME
read -p "please input passwd:" -s POSSWD
echo ""
7.脚本函数
-
定义:程序的别名
-
设定方式:
WORD() { action1 action2 } ##WORD 在脚本中就代表action1 action2这两个动作
练习:
(1)创建脚本check_word.sh
- 如果输入westos输出linux;如果输入linux输出westos;如果输入exit则输出by后退出;如果输入其他字符则提示重新输入
CHECK(){
read -p "please input word: " USERNAME
[ "$USERNAME" = "westos" ] && {
echo linux ##输入westos时
CHECK
} || {
[ "$USERNAME" = "linux" ] && {
echo linux ##输入linus时
CHECK
} || {
[ "$USERNAME" = "exit" ] && {
echo bye ##输入exit时
exit
} || {
echo "please input westos or linux!!" ##输入其他字符串时
CHECK
}
}
}
}
CHECK
(2)创建脚本:user_test.sh
1- 在脚本后输入动作:add 或de或exitl,如果不是这三个动作提示“please input ‘add’ ‘del’ ‘exit’ !!”
2- 当输入的动作是add时,界面显示“please input usename :”,如果用户已存在提示“username is exit!!”,程序重新回到选择添加用户的界面;否则创建新的用户,根据提示“please input password :”设置新建的用户的密码, 最后输出“username is created !!”,程序重新回到动作选择界面
3- 当输入的动作是del时,界面显示“please input uasename :”如果用户不存在提示“username is not exit!!”,程序回到删除动作界面;否则删除用户,并提示“username is delete !!”,程序重新回到动作选择界面
4- 当输入的动作是“exit”则直接退出程序
#!/bin/bash
ACTION(){
read -p "please input action : " Action ##输入要执行的动作
[ "$Action" = "add" ] && {
ADD ##输入的动作是add时执行add函数
} || {
[ "$Action" = "del" ] && { ##输入的动作是del时执行del函数
DEL
} || {
[ "$Action" = "exit" ] && { ##输入的动作是exit时执行exit退出
exit
} ||{
echo "please input action 'add' or 'del'or 'exit'!!"
ACTION ##输入的动作是其他动作时提示重新输入动作,并重新输出动作选择界面
}
}
}
}
ADD(){
read -p "please input username to add: " USERNAME
id $USERNAME &>/dev/null && { ## 要创建的用户名已经存在时
echo "$USERNAME is exit!!"
ADD
} || {
useradd $USERNAME ##要用户名不存在,添加用户
read -p "please set $USERNAME password: " PASSWD ##提示出入密码
echo $PASSWD | passwd --stdin $USERNAME &>/dev/null
echo "$USERNAME is created!!" ##用户创建成功
ACTION
}
}
DEL(){
read -p "please input username to del: " USERNAME
id $USERNAME &>/dev/null && { ##输入的要删除用户存在,执行删除用户,提示删除成功并返回动作选择界面
userdel -r $USERNAME
echo "$USERNAME is delted!!"
ACTION
} || {
echo "$USERNAME is not exit!!" ##输入的要删除用户不存在时,提示用户不存在并重新回到输入删除用户的交互界面
DEL
}
}
[ "$USER" = "root" ] ||{
echo " plese run script in root!! "
exit
} && {
ACTION
}