16 August 2014

自定义变量


在linux系统中,定义一个变量的格式为: 

name=[value]

如果没有指定value,变量将默认赋值为空字符串。

定义变量以后,可以使用 $变量名 来调用变量的值。

变量的名称是字母,数字以及下划线的组合,但首字母不能使数字。

变量名没有硬性要求大小写,但系统默认的变量都是大写,为了保持统一的风格,变量名建议使用大写。

demo :

    NAME = dnzhu-mark
    echo $NAME          #调用变量

typeset 命令

    可以使用 typeset 命令给变量设置属性。

    typeset -r NAME     #添加readonly属性

    declare INT_NUMBER
    typeset -i INT_NUMBER   #设置为整型变量

read 命令来设置变量值

    read -p "input a number:" NUMBER
    #提示输入数据,假设输入:100
    echo $NUMBER        
    #结果为100

查看变量和删除变量

    set     #查看当前系统中所有变量和值

    unset 变量名       #删除变量

变量的范围


使用NAME=value的形式定义的变量,默认仅在当前的shell中有效,子进程不会继承这样的变量。

使用export 命令将变量放入环境中,新的子进程会继承环境中的变量。


    TEST=aaa   
    echo $TEST      #aaa
    bash            #开启子进程  
    echo $TEST      #空
    exit
    export TEST     #导入到环境中
    bash
    echo $TEST      #aaa

环境变量

bash预设了很多环境变量,如下:

  • BASHPID 当前bash进程的进程号
  • GROUPS 当前用户所属组id号
  • HOSTNAME 当前的主机名称
  • PWD 当前工作目录
  • RANDOM 0~32767 之间的随机数
  • UID 当前用户的id号
  • PATH 命令的路径
    echo $PATH

    PATH=$PATH:/root    #在原路径上追加路径

位置变量


位置变量的使用一般体现在脚本中,有的脚本需要传递参数,每个参数之前使用空格分隔。

$0 : 代表当前shell的文件名。
$1 : 代表当前shell的第一个参数。
$2 : 代表第二个参数。
……
$9 : 代表第九个参数。(ps:最多9个参数)

$# : 代表shell脚本的参数个数。
$* : 代表所有参数的内容,所有的参数会当作一个整体来看待。
$@ : 代表所有参数内容,区别于$*的是,每个参数作为个体来看待。
$$ : 表示当前进程的ID号。
$? : 表示程序的退出代码(一般0代表命令执行成功,非0代表命令执行失败)。

数组

定义形式


bash 提供一维数组的功能。数组是索引数组,下标从0开始,没有大小限制。

创建数组的形式:

第一种:
name[subnum] = value    #subnum 数组下标, value 数组的值

第二种:
name =(value1,value2 …… valuen) 

第三种:
declare -a name         #定义一个空数组

使用数组


${name[subnum]}   调用数组变量的值。
ps:如果subnum 是@或者*符号,则调取整个数组的值。

${#name[subnum]}  返回数组当前元素的长度。
ps:如果subnum 是@或者*符号,则调取整个数组的长度。    

DEMO:

    B=(aa,bbb,cccc)
    echo ${B[0]}:${B[1]}:${B[2]}    #aa:bbb:cccc
    echo "length of is ${#B[0]}"    #length of is 2
    echo "length of is ${#B[2]}"    #length of is 4
    echo ${#B[@]}                   #3

判断表达式


格式: [ 表达式 ]
ps:表达式的两边都要留空格。

demo:
#判断/etc/是否为目录,成立输出y,否则输出n。
[ -d /etc/ ] && echo 'y' || echo 'n'    #y

#判断/etc/passwd文件是否存在,存在输出y,否则输出n。    
[ -e /etc/passwd ] && echo 'y' || echo 'n'  #y

#判断/etc/passwd是否是一个普通问题,成立输出y,否则输出n。
[ -f /etc/passwd ] && echo 'y' || echo 'n'  #y

#判断/etc/passwd是否是链接文件,成立输出y,否则输出n。
[ -h /etc/passwd ] && echo 'y' || echo 'n'  #n

#判断PATH变量的值是否定义并且非空,成立输出y,否则输出n。
[ -n $PATH ] && echo 'y' || echo 'n'        #y

#判断PATH变量的值是否为空,成立输出y,否则输出n。
[ -z $PATH ] && echo 'y' || echo 'n'        #n

#判断两个值是否相等,相等输出y,否则输出n。    
[ 112 -eq 112 ] && echo 'y' || echo 'n'     #y

#判断第一个值是否大于第二个值,成立输出y,否则输出n。        
[ 322 -ge 112 ] && echo 'y' || echo 'n'     #y

#判断第一个值是否小于第二个值,成立输出y,否则输出n。        
[ 11 -le 112 ] && echo 'y' || echo 'n'        #y