您的位置:首页 > 运维架构 > Shell

bash变量位置参数变量预定义变量环境变量详解

2017-07-28 16:51 381 查看
Shell简化管理员操作,系统管理;

什么是变量与变量分类

什么是变量:变量就是可以改变的量,是计算机内存单元,其中存放的值可以改变。变量让你能够把程序中准备使用的每一段数据都赋给一个简短、易于记忆的名字,因此他们十分有用。

变量的命名规则:有数字、字母、下划线组成,不可以用数字开头;变量名的长度不得超过255个字符;变量名在有效的范围内必须唯一的,Bash变量默认为字符型

变量的分类:

 

1.      用户自定义变量:用户自定义的变量;

2.      环境变量:这种变量主要保存的是和系统操作环境相关的数据。变量可以自定义,但是对系统生效的环境变量名和变量作用是固定的;

3.      位置参数变量:这种变量主要是用来向脚本当中传递参数或者数据的,变量名不能自定义,变量作用是固定的

4.      预定义变量:是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

 

变量的调用$

Set

Set –u

用户自定义变量

变量名=变量值 eg:x=5 name=”jie cao”

注:等号左右不能有空格;变量的赋值中有空格需要双引号;

变量的调用:使用”$”; eg: echo $变量名   echo $x

变量的叠加:eg:x=123
进行变量叠加 x=”$x”456或者x=${x}456

                            输出x=123456

         unset x
#删除变量

环境变量

环境变量尽量大写

环境变量与用户自定义变量的区别:

1.      用户自定义变量只在当前shell中生效;

2.      环境变量在当前shell和这个shell中的所有子shell中生效;

3.      环境变量是全局变量,而用户自定义变量是局部变量;

变量可以自定义,对系统生效的环境变量名和变量作用是固定的

设置环境变量:export
变量名=变量值或者变量名=变量值
+ export 变量名

 

查看环境变量:set
 #查看所有变量

                            env 
#查看环境变量

常用环境变量

1.      HOSTNAME:
 主机名;

2.      SHELL: 当前的shell;

3.      TREM: 终端环境;

4.      HISTSIZE: 历史命令条数;

5.      SSH_CLIENT: 当前操作环境是用ssh连接,这里记录客户端ip;

6.      SSH_TTY: ssh连接的终端是pts/1;

7.      USER: 当前登录的用户;

PATH环境变量:

1.      PATH变量:系统查找命令的路径;

2.      Echo $PATH
#查看PATH环境变量;

3.    
4000
  PATH=”PATH”:/root/sh  #增加PATH变量的值

Eg:增加一个脚本到PATH环境变量中

         vimhello.sh

         cphello.sh /bin/

         hello.sh#可以直接显示里面的内容

PS1环境变量

1.      \d :
显示日期,格式为“星期月日”;

2.      \H :
显示完整的主机名。如默认主机名“localhost.localmain”;

3.      \t :显示24小时制时间,格式为:“HH:MM:SS”;

4.      \A :显示24小时制时间,格式为:“HH:MM”;

5.      \u
显示当前用户名;

6.      \w :显示当前所在目录的完整名称;

7.      \W:显示当前所在目录的最后一个目录;

8.      \$ :提示符。如果是root用户会显示提示符为“#”,如果是普通用户会显示提示符为“$”;

Eg:改一下环境变量,先查看PS1环境变量—echo $PS1

                   按照ps1的环境变量模式,进行参数修改:PS1=’[\u@\A \w]\$ ‘

当前语气查询 

         locale 
#查询当前系统语系

         LANG :定义系统主语系的变量;

         LC_ALL:定义整体语系的变量

命令:echo$LANG
 #查看系统当前语系

         locale –a | more  #查看Linux支持的所有语系

 

位置参数变量

1. $n :n为数字,$0代表本身,$1-$9代表第一到第九个参数,十个以上的参数需要用大括号包含,如${10};

Eg:canshu1.sh

#!/bin/bash

num1=$1

num2=$2

sum=$(($num1+$num2))#变量sum的和是num1加num2

echo$sum  #打印出变量sum的值

命令:./canshu1.sh 11 22

运行结果为:33

2.  $* :这个变量代表命令行中所有的参数,$*把所有的参宿看成一个整体;

3.  $@: 这个变量也代表命令行中所有的参数,不过$@把每一个参数区分对待

4.  $#: 这个变量代表命令行中的所有参数的个数;

Eg:canshu2.sh

#!/bin/bash

echo “A total of $# paramenters”  #使用$#代表所有参数的个数

echo “The paramenters is : $*”   #使用$*代表所有的参数

echo “The paramenters is :$@’  #使用$@代表所有参数;

 

命令:./canshu2.sh 11 22 33 44

输出结果:

A total of 4 paramenters

The paramenters is : 11 22 33 44

The paramenters is : 11 22 33 44

 

Eg:     $*与$@的区别

touch canshu3.sh

#!/bin/bash

for i in “$*”   # $*中的所有参数看成一个整体,所以这个for循环只会执行一次

           do

                    echo“The parameters is: $i”

           done

 

for y in “$@”   #$@每个中的每个参数都看成独立的,所以“$@”中有几个参数就会循环几次

           do

                    echo“parameter:$y”

           done

 

         命令:./canshu3.sh 1 2 3 4

         输出结果:1 2 3 4

                            1

                            2

                            3

                            4

 

 

预定义变量

1.      $? : 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执       行;如果这个变量的值非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。

2.      $$: 当前进程的进程号(PID);

Eg:命令ls

           Echo$$

输出ls的进程号

3.      $! : 后台运行的最后一个进程的进程号(PID)

 

接收键盘输入

 

read [选项][变量名]

         -选项:

         -p “提示信息”:在等待read输入时,输出提示信息;

         -t 秒数 :read命令会一直等待用户输入,使用此选项可以指定等待时间;

         -n 字符数: read命令只接受指定的字符数,就会执行

         -s :  隐藏输入的数据,适合用于机密信息的输入

Eg:touchbl.sh

         #!/bin/bash

         read –p “please input your name : “ –t 30 name  #等待用户30s的输入时间

         echo $name

         read –p “please input your passwd: “ –s passwd  #不显示输入的信息

         echo –e “\n”  #
换行

         read –p “please input your sex[M/F]: “ –n 1 sex   #输入一个字符后脚本就继续向下执行

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息