1.变量的定义

定义本身:变量就是内存一片区域的地址

变量存在的意义:命令无法操作一直变化的目标;用一串固定的字符来表示不固定的目标可以解决此问题
2.shell脚本中变量的定义方法

1)环境级别

export a=1       在环境关闭后变量失效

实验:

a=1
  echo $a  【会显示1】
  exit  【退出当前连接的用户】
  ssh -l root 172.25.254.117   #再次连接相当于重新开了shell,进程不一样了
  echo $a

通过echo 打印变量 shell echo 打印变量值_vim

 2)用户级别

vim ~/.bash_profile
    export a=1`

实验:

vim ~/.bash_profile
      export a=1
  source ~/.bash_profile
  echo $a   【会显示a=1】
  su - westos  #切换用户身份
  echo $a   【什么都不显示】

通过echo 打印变量 shell echo 打印变量值_运维_02

通过echo 打印变量 shell echo 打印变量值_运维_03

 3) 系统级别

  vim /etc/profile           #在主配置文件中编写
        export a=2

  vim /etc/profile.d/westos.sh       #在子配置文件/etc/profile.d中新建立个脚本westos.sh,编写
        export b=3

!以上两种方法都可以在主配置文件和子配置文件中编写的效果时一样的,但是主配置文件里命令较多,万一编写错了可能系统起不来,建议在子配置文件中编写

实验:

vim /etc/profile.d/westos.sh
      #!/bin/bash
      export a=1
  source /etc/profile.d/westos.sh
  echo $a  【会显示1】
  su - westos     #切换用户身份
  echo $a  【切换用户身份后也会显示1】

通过echo 打印变量 shell echo 打印变量值_vim_04


 3.变量名称

1)变量名称可包含的字符:字母、下划线_、数字
2)变量名称定义规则:不能用数字开头

3)建议:

  变量名称短全用大写字符
  变量名称长用_区分子类
  WESTOS
  Westos_Linux
  westoS_Linux


4.变量的转译
1)转译

\               #转译单个字符
""             #弱引用,批量转译个数字符 不能转译"\ 反斜杠" "`反引号" "$" "!"
''              #强引用

2)声明
a=1
echo $ab
echo ${a}b

通过echo 打印变量 shell echo 打印变量值_网络_05

 3)变量的数组
a=(1 2 3 4 5)
a$  [a[@]:起始元素id:元素个数]
数组中元素的个数是从0开始算起:例如a[0]表示数组中第一个元素、a[1]表示数组中第二个元素、a[4]表示数组中第五个元素、
echo ${a[0]}        ##数组中第一个元素
echo ${a[-1]}        ##数组中最后一个元素
echo ${a[*]}        ##数组中所有元素
echo ${a[@]}        ##数组中所有元素
echo ${a[@]:0:3}    ##数组中第一个元素到第3个元素
echo ${#a[@]}        ##数组中元素的个数

通过echo 打印变量 shell echo 打印变量值_通过echo 打印变量_06


create_user.sh userfile 

userfile用的用户会被全部建立

a[5]=6                  ##添加第6个元素,数值为6(因为数组中元素的个数是从0开始算起的)

通过echo 打印变量 shell echo 打印变量值_通过echo 打印变量_07


unset a[n]        ##删除数组中的第n+1个元素【例如:unset a[4]  #表示删除这个数组中第5个元素】

unset a            ##删除a这个数组

通过echo 打印变量 shell echo 打印变量值_通过echo 打印变量_08


 5.Linux中命令的别名设定

1)临时设定
alias xie='vim'        ##临时设定
xie                         #执行写就会出现vim编辑的页面
alias                      #查看命令中的别名
退出shell,重新建立shell
xie                         不能执行此命令

通过echo 打印变量 shell echo 打印变量值_网络_09

 

通过echo 打印变量 shell echo 打印变量值_网络_10

通过echo 打印变量 shell echo 打印变量值_通过echo 打印变量_11

 2)用户级别设定

vim ~/.bashrc
     alias xie='vim'                   ##只针对与用户生效
source ~/.bashrc                   #增量的刷新
xie                                         #执行此命令就会出现vim编辑的页面
退出shell,重新建立shell,执行xie命令也会出现vim编辑画面
su - westos                           #切换用户身份
xie                                         #不能执行此命令
exit

通过echo 打印变量 shell echo 打印变量值_通过echo 打印变量_12

通过echo 打印变量 shell echo 打印变量值_运维_13

 

  3)系统级别设定

vim /etc/bashrc                ##针对系统所以用户生效

   alias xie='vim'

source /etc/bashrc             #增量的刷新

xie                                        #执行此命令就会出现vim编辑的页面

su - westos                              #切换用户身份

xie                                               #此命令仍然生效

通过echo 打印变量 shell echo 打印变量值_vim_14

通过echo 打印变量 shell echo 打印变量值_服务器_15

 

 unalias xie        ##删除当前环境中的alias【删除~/.bashrc、/etc/bashrc里面添加的别名设定】

通过echo 打印变量 shell echo 打印变量值_网络_16


6.用户环境变量的更改

设定方式:
~/.bash_profile
export PATH=$PATH:/mnt

/etc/bash_profile
export PATH=$PATH:/mnt

实验:

vim /mnt/test.sh
   echo a=1
echo $PATH
chmod +x /mnt/test.sh
/mnt/test.sh   
vim ~/.bash_profile 
    export PATH=$PATH:/mnt
source  ~/.bash_profile
echo $PATH
/mnt/test.sh   #能自己执行

通过echo 打印变量 shell echo 打印变量值_通过echo 打印变量_17

通过echo 打印变量 shell echo 打印变量值_通过echo 打印变量_18

 

通过echo 打印变量 shell echo 打印变量值_网络_19

 

 1)直接利用命令执行结果

$()  或者  ``                ##优先执行
TEST=`hostname` TEST=$(hostname)
例如:
TIME=date
echo $TIME  #出现的是date字符
TIME=$(date)
echo $TIME  #出现的是时间
TIME=`date`  #跟$(date)效果一样,但是``应用地方更多

2)脚本中的传参
非交互模式:
`$0 is /mnt/test.sh`          <!--脚本本身-->
`$1 is westos                     <!--脚本后所输入的第一串字符-->
`$2 is linux`                     <!--脚本后所输入的第一串字符-->
`$3 is redhat`                    <!--脚本后所输入的第一串字符-->
`$* is westos linux redhat`       <!--脚本后所输入的所有字符"westos linux redhat"-->
`$@ is westos linux redhat`       <!--脚本后所输入的所有字符'westos' 'linux' 'redhat'-->
`$# is 3`              <!--脚本后所输入的字符串个数-->

实验:

vim test.sh
     #!/bin/bash
     echo '$0' is $0
     echo '$1' is $1
     echo '$2' is $2
     echo '$3' is $3
     echo '$#' is $#
     echo '$*' is $*
     echo '$@' is $@

通过echo 打印变量 shell echo 打印变量值_vim_20

 sh test.sh 
    $0 is test.sh
    $1 is
    $2 is
    $3 is
    $# is 0
    $* is
    $@ is

通过echo 打印变量 shell echo 打印变量值_通过echo 打印变量_21


sh test.sh test

    $0 is test.sh

    $1 is test

    $2 is

    $3 is

    $# is 1

    $* is test

    $@ is test

通过echo 打印变量 shell echo 打印变量值_通过echo 打印变量_22


sh test.sh test linux

通过echo 打印变量 shell echo 打印变量值_服务器_23


sh test.sh test linux westos 

通过echo 打印变量 shell echo 打印变量值_运维_24

2)交互模式传参:

read  WESTOS            ##对westos赋值

read -p "please input word:"    ##输出提示语

-s                ##隐藏输入内容 

实验:

 vim test1.sh
   #!/bin/bash
   read -p "Please input word: " -s WORD    ##输出提示语,并隐藏输入内容
   echo " "   #显示空格,相当于换行【相当于\n】
   echo $WORD   #显示刚才输入的变量
sh test1.sh 
    Please input word:  
    hello

通过echo 打印变量 shell echo 打印变量值_运维_25

通过echo 打印变量 shell echo 打印变量值_运维_26

 


 7.脚本函数
定义:程序的别名
设定方式:

WORD()
{
    action1
    action2
}


WORD 在脚本中就代表action1 action2这两个动作

 练习脚本 

sh create_user.sh

Please input username: westos

westos exist----<output>---> westos is exist------>Please input username:

westos not exist---------please input password: 无回显密码

此用户会自动建立并且密码为提示后设定的密码

并显示:westos is created

并再次提示Please input username:

当Please input username:exit

此脚本退出

脚本书写思路

1)判定exit推出

 

[ "$USER" = "exit" -o "$USER" = "EXIT" ] &&{
          echo bye
  }||{
          进入判定用户是否存在
 }

2) 判定用户是否存在

 用户存在显示返回判定exit

id 用户名称变量 &> /dev/null && {
          echo 用户存在
          判定exit
  }


  用户不存在建立用户返回判定exit

  ||{

  显示 please input password:

  建立用户

  更改密码

  显示用户建立成功

  判定exit

  }

 

vim create_user.sh
#!/bin/bash
ACTION()
{
  read -p "Please input username:  " username
  [ "$username" = "exit" ] && {
      echo bye
      exit
  }
  grep "$username" /etc/passwd &>/dev/null && {
    echo $username is exist 
    ACTION
  } || {
     echo $username is not exit
     read -p "please input password: " -s passwd
     useradd $username
     echo $passwd | passwd --stdin $username
     echo  $username is created
     ACTION
   }
 }
 ACTION

通过echo 打印变量 shell echo 打印变量值_vim_27

通过echo 打印变量 shell echo 打印变量值_运维_28