目录
一、变量的定义
二、shell脚本中变量的定义方法
1、变量名称
2、环境级别
3、用户级别
4、系统级别
5、删除设定的变量
三、变量的转译
1、转译
2、声明
3、变量的数组
四、Linux中命令的别名设定
五、用户环境变量的更改
脚本中的传参
1、非交互模式
2、交互模式
六、脚本函数
练习脚本
一、变量的定义
- 变量就是内存一片区域的地址(用一个字符串表示内存地址的方式)
- 变量存在的意义:命令无法操作一直变化的目标,用一串固定的字符来表示不固定的目标可以解决此问题
二、shell脚本中变量的定义方法
1、变量名称
- 变量名称可包含的字符:字母,下划线
_
,数字 - 变量名称定义规则:不能用数字开头
- 建议:变量名称短全用大写字符,变量名称长用
_
区分子类
用sh
无法运行脚本,用.
可以运行脚本
因为sh
的运行方式会在当前shell中重新开启一个子shell,因此变量的值没有传递到子shell中,所以无法得到运行结果,须将变量放到公共区域中去。
2、环境级别
export a=1 在环境关闭后变量失效
当环境关闭后,shell在内存中的所有数据被系统回收,打开新的shell,是一个新的内存地址,无法寻址得到a的值
3、用户级别
环境关闭后,仍有效,切换用户后失效
vim ~/.bash_profile
export a=1
4、系统级别
不受环境和用户的影响
vim /etc/profile
export a=2
vim /etc/profile.d/westos.sh
export b=3
5、删除设定的变量
依次删除设定的系统变量,用户变量,环境变量
rm -fr /etc/profile.d/skk.sh
vim ~/.bash_profile
unset a
三、变量的转译
1、转译
\ | 转译单个字符 |
“” | 弱引用,批量转译字符,不能转译"\" " " "$" "!" |
'' | 强引用 |
$$ | 当前进程的id |
2、声明
对a做变量声明
a=1
echo $ab
echo ${a}b
3、变量的数组
a=(1 2 3 4 5 6)
a$[a[@]:起始元素id:元素个数]
echo ${a[0]} ##数组中第一个元素
echo ${a[3]} ##数组中第4个元素
echo ${a[-1]} ##数组中最后一个元素
echo ${a[*]} ##数组中所有元素
echo ${a[@]} ##数组中所有元素
echo ${a[@]:0:3} ##数组中第1到3个元素
echo ${a[@]:3:3} ##第三个元素后的三个元素
echo ${#a[@]} ##数组中元素的个数
unset a[n] ##删除数组中的第n+1个元素
unset a ##删除a这个数组
四、Linux中命令的别名设定
alias xie='vim' ##临时设定
vim ~/.bashrc
alias xie='vim' ##只针对当前用户生效
vim /etc/bashrc
alias xie='vim' ##针对系统所有用户生效
vim /etc/skel/.bashrc
alias xie='vim' ##针对新建的用户生效
alias ##查看
unalias xie ##删除当前环境中的alias
五、用户环境变量的更改
设定的方式:
export PATH=$PATH:/mnt ##环境级别
vim ~/.bash_profile ##用户级别
vim /etc/bash_profile ##系统级别
/mnt
下的脚本有执行权限后,可以不用加绝对路径执行
脚本中的传参
1、非交互模式
$0 | shell脚本的文件名 |
$1 | 脚本后所输入的第一串字符 |
$2 | 脚本后所输入的第二串字符 |
$* | 脚本后所输入的所有字符"1 2 3" |
$@ | 脚本后所输入的所有字符"1" "2" "3" |
$# | 脚本后所输入的字符串个数 |
vim test.sh
echo '$0' is $0
echo '$1' is $1
echo '$2' is $2
echo '$*' is $*
echo '$@' is $@
echo '$#' is $#
2、交互模式
read
:赋值,-p
:输出提示语-s
:隐藏输入内容,echo ""
:换行
vim test2.sh
read -p "Please input name:" -s NAME
echo ""
echo $NAME
六、脚本函数
定义:程序的别名
设定方式:WORD
在脚本中就代表action1
、action2
这两个动作
WORD()
{
action1
action2
}
练习脚本
1
sh create_user.sh Please input username: westos
westos exist> westos is exist>Please input username:
westos not existplease input password: 无回显密码
此用户会自动建立并且密码为提示后设定的密码
并显示:westos is created 并再次提示Please input username:
当Please input username:exit 此脚本退出
EXIT()
{
read -p "Please input username: " username
[ "$username" = "exit" ]||[ "$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 password
echo ""
useradd $1
echo $password | passwd --stdin $1 &> /dev/null && echo $1 is created
EXIT
}
}
EXIT
2
echo "[a]add [d]delete"
read -p "Please input action: " ACTION
[ "$ACTION" != "a" -a "$ACTION" != "d" ] && {
echo Wrong action !!
exit
}
[ "$ACTION" = a ] &&{
read -p "Please input username: " USERNAME
id $USERNAME &> /dev/null && {
echo $USERNAME is exist !!
}||{
read -p "Please input password: " PASSWORD
useradd $USERNAME
echo $PASSWORD | passwd --stdin $USERNAME &> /dev/null &&{
echo $USERNAME is created !!
}
exit
}
}
[ "$ACTION" = d ] &&{
read -p "Please input username: " USERNAME
id $USERNAME &> /dev/null && {
userdel -r $USERNAME
echo $USERNAME is delete !!
}||{
echo $USERNAME is not exist !!
}
exit
}