一、变量概述
1.变量:在程序运行过程中允许改变值的量
2.特点:用一串固定的字符表示不固定的值; 是一种使用方便的占位符,用于引用计算机内存地址;
在shell中不能永久保存在系统中,必须在文件中声明;
3.种类:
环境级:只在当前shell有效,shell关闭变量丢失;
用户级:只针对当前用户有效,其他用户无效;
系统级:当前系统所有用户有效;
二、变量设置
1.环境级变量
只在顶级程序使用变量(shell)
[root@localhost ~]# a=1
[root@localhost ~]# echo $a
1
[root@localhost ~]# bash
[root@localhost ~]# ps f
PID TTY STAT TIME COMMAND
2234 pts/1 Ss 0:00 -bash
2326 pts/1 S 0:00 \_ bash
2350 pts/1 R+ 0:00 \_ ps f
2188 pts/0 Ss+ 0:00 /bin/bash
593 tty1 Ss+ 0:02 /usr/bin/Xorg :0 -background none -verbose -auth /run
1303 ttyS0 Ss+ 0:00 /sbin/agetty --keep-baud ttyS0 115200 38400 9600
[root@localhost ~]# echo $a
在子程序中也可使用变量
[root@localhost ~]# export a=1
[root@localhost ~]# echo $a
1
[root@localhost ~]# bash
[root@localhost ~]# echo $a
1
2.用户级变量 ##只在当前用户有效
[root@localhost ~]# vim .bash_profile
[root@localhost ~]# sou
sound_dump soundstretch source
[root@localhost ~]# sou
sound_dump soundstretch source
[root@localhost ~]# source .bash_profile
[root@localhost ~]# echo $a
10
[root@localhost ~]# su - student
Last login: Thu Jun 7 12:15:40 EDT 2018 on pts/0
[student@localhost ~]$ echo $a
[student@localhost ~]$ logout
3.系统级变量
[root@localhost ~]# vim /etc/profile
[root@localhost ~]# source /etc/profile
[root@localhost ~]# echo $a
100
[root@localhost ~]# su - student
Last login: Mon Jul 2 11:09:59 EDT 2018 on pts/1
[student@localhost ~]$ echo $a
100
[student@localhost ~]$ logout
三、变量的声明
1.字符的转译
\ ##转译单个字符
' ' ##转译''中所有字符
" " ##弱引用,不能转译 “ \ ”、“ $ ”、“ ` ”、“ ! ”
$ (date) ##等同于 `date`
[root@localhost ~]# echo "%%%%`date`%%%%%"
%%%%Mon Jul 2 11:31:28 EDT 2018%%%%%
[root@localhost ~]# echo $(date)
Mon Jul 2 11:31:43 EDT 2018
$ [ 1+2+3 ] ##计算 [ ] 的值
$ { a } b ##区分显示 { } 内变量
[root@localhost ~]# echo $[1+2+3]
6
[root@localhost ~]# a=14
[root@localhost ~]# echo ${a}b
14b
2.变量值传递
$1 ##脚本后的第1串字符
$2 ##脚本后的第2串字符
$# ##脚本后字符串的个数
$* ##脚本后的所有字符串 " 1 2 3 ..."
$@ ##脚本后的所有字符串 "1" "2" "3" "..."
read -p " " 变量
read -p " " -s 加密变量
eg:
编写脚本echo.sh,当输入exit时退出,否则一直执行
#!/bin/bash while true do #read -p "please input a word: " WORD read -p "please input a word: " -s WORD echo $WORD [ $WORD = exit ] && exit done
2、编写脚本user_ctrl.sh实现建立和删除用户的功能
1 #!/bin/bash
2 [ -z $1 ] && {
3 echo Error:pleace input create or delete!!
4 exit 1
5 }
6 [ $1 != "create" -a $1 != "delete" ] && {
7 echo Error:please input create or delete!!
8 exit 1
9 }
10 [ $1 = create ] && {
11 read -p "please give a user name: " USER_NAME
12 User=`awk -F : '{print $1}' /etc/passwd | grep $USER_NAME`
13 [ -z $User ] && {
14 read -p "please give a passwd: " -s PASSWD
15 useradd $USER_NAME
16 echo $PASSWD | passwd --stdin $USER_NAME
17 } ||
18 echo $User is exist!!
19 }
20 [ $1 = delete ] && {
21 read -p "please give a user name: " USER_NAME
22 User=`awk -F : '{print $1}' /etc/passwd | grep $USER_NAME`
23 [ -z $User ] && {
24 echo $USER_NAME is not exist!!
25 exit 1
26 }
27 userdel -r $User
28 }
交互式脚本:要求当删除用户时,再次确认操作并给出回复!
1 #!/bin/bash
2 [ -z $1 ] && {
3 echo Error:pleace input create or delete!!
4 exit 1
5 }
6 [ $1 != "create" -a $1 != "delete" ] && {
7 echo Error:please input create or delete!!
8 exit 1
9 }
10 [ $1 = create ] && {
11 read -p "please give a user name: " USER_NAME
12 User=`awk -F : '{print $1}' /etc/passwd | grep $USER_NAME`
13 [ -z $User ] && {
14 read -p "please give a passwd: " -s PASSWD
15 useradd $USER_NAME
16 echo $PASSWD | passwd --stdin $USER_NAME
17 } ||
18 echo $User is exist!!
19 }
20 [ $1 = delete ] && {
21 read -p "please give a user name: " USER_NAME
22 User=`awk -F : '{print $1}' /etc/passwd | grep $USER_NAME`
23 [ -z $User ] && {
24 echo $USER_NAME is not exist!!
25 exit 1
26 } ||
27 read -p "Are you sure[y/n]: " DEL
28 [ -z $DEL ] && {
29 echo Error:please input y/n!!
30 exit 1
31 }
32 [ $DEL = y ] && {
33 userdel -r $USER_NAME
34 echo $USER_NAME is deleted!!
35 } || echo NOT DO DELETE!!
36 }
4.设置系统命令别名
环境级: alias xie=‘vim’
用户级: vim .bashrc
系统级: vim /etc/bashrc
取消命令别名: unalias xie
##以用户级为例##
[root@localhost mnt]# vim ~/.bashrc
[root@localhost mnt]# cat ~/.bashrc | grep vim
alias xie='vim'
[root@localhost mnt]# source ~/.bashrc
[root@localhost mnt]# xie
[root@localhost mnt]# su - student
Last login: Mon Jul 2 11:15:20 EDT 2018 on pts/1
[student@localhost ~]$ xie
bash: xie: command not found...
5.退出值exit
exit = 0 ##上一命令执行正确
exit != 0 ##上一命令执行错误
[student@localhost ~]$ xie
bash: xie: command not found...
[student@localhost ~]$ echo $?
127
[student@localhost ~]$ vim
[student@localhost ~]$ echo $?
0
6.函数
用函数编写脚本判断文件类型
脚本格式
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 a filename!!
12 exit 1
13 }
14 Check_File "-e" $1 "" "$1 is not exist"
15 Check_File "-L" $1 "$1 is a link file"
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"