shell的变量
基本内容:
一.在shell脚本中如何定义变量
二.变量的转译
三.linux系统中命令别名的设定
四.用户环境变量的设定
五.利用命令执行结果设定变量
六.脚本函数
- 1
- 2
- 3
- 4
- 5
- 6
一.变量的定义
1.变量:变量即在程序运行过程中它的值是允许改变的量。变量是用一串固定的字符来标示不固定的值的一种方法。变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 Script 运行时可更改的程序信息,在 shell 中变量是不能永久保存在系统中的,必须在文件中声明。
2.在 shell 脚本中变量的种类
在 shell 中变量分为环境级变量,用户级变量,系统级变量。
1.环境级变量:只在当前 shell 中生效, shell 关闭变量丢失。
2.用户级变量:写在用户的骨文件(.bash_profile)中,只针对当前用户生效。
3.系统级变量:被写在系统的配置文件 /etc/profile 或者 /etc/profile.d/ 中,对于所有用户都生效。
- 1
- 2
- 3
3.shell 脚本中变量的定义方法
1.环境级
export A=1
2.用户级
vim ./bash_profile
export A=1
3.系统级
vim /etc/profile
export A=1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
4.变量设定 :
1.环境级变量:只在顶级程序中生效
- 1
示例:在shell中在开一个shell执行echo $a不生效
在子程序中使用变量用:export a=1
- 1
示例:
2.用户级变量:写在用户的骨文件(.bash_profile)中,只针对当前用户生效。
vim .bash_profile 编辑配文件
内容:
export a=5
souecr .bash_profile 刷新让系统重读文件
- 1
- 2
- 3
- 4
- 5
示例:只对当前用户生效
3.系统级变量:被写在系统的配置文件 /etc/profile 或者 /etc/profile.d/ 中,对于所有用户都生效。
- 1
示例: vim /etc/profile 编辑文件
5.变量名称的规范
1.变量名称中通常包含大小写字字母,数字,下划线(不是必须)。
2.变量名称格式:
WESTOS_LINUX
Westos_Linux
westoS_Linux
- 1
- 2
- 3
- 4
- 5
二.字符的转译及变量的声明
1. 字符的转译
\ 转译单个字符
"" 弱引用,批量转译 "" 中出现的字符,
'' 强引用,批量转译 '' 中出现的字符
'' 与 "" 两者的区别在于, ""弱引用不能转译 "\","`","!","$"
${} 变量声明
() 等于`` 表示先执行
- 1
- 2
- 3
- 4
- 5
- 6
示例:
[] 表示运算
- 1
示例:
2. 变量值传递
$1 脚本后的第一串字符
$2 脚本后的第一串字符
$# 脚本后字符串的个数
$* 脚本后所有字符串"1 2 3 4 ..."
$@ 脚本后所有字符串"1" "2" "3" "..."
- 1
- 2
- 3
- 4
- 5
用 read 实现变量传递
read -p " " 变量
read -p " " -s 加密变量
- 1
- 2
示例:编写脚本echo.sh,当输入exit时推出,否则一直执行
vim echo.sh 编辑脚本
内容:
#!/bin/bash
while true
do
read -p "Please input a word " -s WORD
echo $WORD
[ $WORD = exit ] && exit
done
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
执行结果:
3.脚本示例:
编辑脚本:user_ctrl.sh实现建立删除用户
vim user_ctrl.sh 编辑脚本
内容:
#!/bin/bash
[ -z $1 ] && {
echo Error:please input create or delete!!
exit 1
}
[ $1 != "create" -a $1 != "delete" ] && {
echo Error:please input create or delete!!
exit 1
}
[ $1 = "create" ] && {
read -p "please give me a user name: " USER_NAME
User=`awk -F : '{print $1}' /etc/passwd | grep $USER_NAME`
[ -z $User ] && {
read -p "please give me a passwd: " -s PASSWD
useradd $USER_NAME
echo $PASSWD | passwd --stdin $USER_NAME
} ||
echo $User is exist!
}
[ $1 = "delete" ] && {
read -p "plesae give me a user name: " USER_NAME
User=`awk -F : '{print $1}' /etc/passwd | grep $USER_NAME`
[ -z $User ] && {
echo $USER_NAME is not exist!
exit 1
}
userdel -r $User
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
执行结果:
4.优化脚本user_ctrl.sh实现:删除用户时,再次确认操作并给出回复!
修改脚本delete部分:
#!/bin/bash
[ -z $1 ] && {
echo Error:please input create or delete!!
exit 1
}
[ $1 != "create" -a $1 != "delete" ] && {
echo Error:please input create or delete!!
exit 1
}
[ $1 = "create" ] && {
read -p "please give me a user name: " USER_NAME
User=`awk -F : '{print $1}' /etc/passwd | grep $USER_NAME`
[ -z $User ] && {
read -p "please give me a passwd: " -s PASSWD
useradd $USER_NAME
echo $PASSWD | passwd --stdin $USER_NAME
} ||
echo $User is exist!
}
[ $1 = "delete" ] && {
read -p "plesae give me a user name: " USER_NAME
User=`awk -F : '{print $1}' /etc/passwd | grep $USER_NAME`
[ -z $User ] && {
echo $USER_NAME is not exist!
exit 1
} ||
read -p "Are you sure delete[y/n]:" DEL
[ -z $DEL ] && {
echo Error:please input y/n!!
exit 1
}
[ $DEL = y ] && {
userdel -r $USER_NAME
echo $USER_NAME is delete !!
} ||
echo Not do deleted!!
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
执行结果:
5.设置系统命令别名
环境级: alias xie='vim' vim的别名为xie
用户级: vim .bashrc
系统级: vim /etc/bashrc
取消命令别名: unalias xie
- 1
- 2
- 3
- 4
示例:系统级
6.退出值exit
exit = 0 上一命令执行正确
exit != 0 上一命令执行错误
- 1
- 2
7.函数
用函数编辑脚本判断文件的类型:
vim Check_file.sh 编辑脚本
内容:
1 #!/bin/bash
2 Check_File(){
3 [ $1 $2 ] && {
4 echo $3
5 } || {
6 echo -n $4
7 echo -ne "\r \r"
8 }
9 }
10 [ -z $1 ] && {
11 echo Error:please give me a filename!
12 exit 1
13 }
14 Check_File "-e" $1 "" "$1 is not exit"
15 Check_File "-L" $1 "$1 is a link"
16 Check_File "-f" $1 "$1 is a common file"
17 Check_File "-S" $1 "$1 is a socket"
18 Check_File "-d" $1 "$1 is a directory"
19 Check_File "-c" $1 "$1 is a char file"
20 Check_File "-b" $1 "$1 is a block"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23