shell—变量

一、变量概述

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"

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值