一、shell有两类变量:
1、临时变量
2、永久变量
二、两种特殊的变量
1、位置变量
2、特殊变量
变量:是shell传递数据的一种方法,用来代表每个取值的符号名。
临时变量:临时变量是shell程序内部定义的,其使用范围仅仅限于定义它的程序,对其他程序不可见。包括:用户自定义变量、位置变量。shell脚本程序中的变量都是临时变量。
自定义变量
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ num=10
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ echo $num #取出变量,变量尽量大写,小写也可以。
10
使用set可以查看系统中当前的所有变量,使用unset删除指定的变量。
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ unset num
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ echo $num #没有啦,已经删除掉了。
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$
eg:下面注意 等号两边不能有空格,以及单引号和双引号的区别。
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ STR="is string"
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ echo $STR
is string
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ echo "i am is string"
i am is string
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ echo "i am $STR"
i am is string
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ echo 'i am $STR'
i am $STR
永久变量:永久变量就是环境变量(例如java中的PATH),其值不随shell脚本的执行结果而消失。下面看一下永久变量,
eg:下面是当前环境变量。其中美元符合表示获取这个变量。
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ echo $PATH
/home/love/bin:/home/love/.local/bin:/home/love/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
eg:下面便是当前计算机中liux操作系统的字符集:
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ echo $LANG
en_US.UTF-8
在shell里面还有2中特殊的变量,一种是位置变量,还有一种是特殊的变量,在我们变成shell的时候非常的有用,一定要熟悉他们。
ls -l file1 file2 file3... (n范围=1-9)在代码里面使用$0-9进行替代。
eg:下面注意美元符号占位符。注意替换符号的打印是在键盘左上角1数字的左边那个键。
#!/bin/sh
DATE=`/bin/date +%Y%m%d` #生成的一个局部变量,对其赋值,2个点是命令替换符,命令执行的结果赋值给DATE
echo "TODAY IS $DATE" #获取DATE这个变量,会从上下文环境中去找。这里就是当前环境。
/bin/ls -l $1 #$1相当于占位符号,在执行这个脚本的时候要把这个东西补全。
/bin/ls -l $2
/bin/ls -l $3
运行脚本结果显示如下:
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo3.sh /usr /usr/local /home
TODAY IS 20190116
total 68
drwxr-xr-x 2 root root 36864 Jan 13 22:27 bin
drwxr-xr-x 2 root root 4096 Apr 13 2016 games
drwxr-xr-x 34 root root 4096 Jan 6 19:57 include
drwxr-xr-x 65 root root 4096 Jan 6 19:57 lib
drwxr-xr-x 12 root root 4096 Aug 31 2017 local
drwxr-xr-x 2 root root 4096 Jan 6 19:57 sbin
drwxr-xr-x 131 root root 4096 Jan 6 19:57 share
drwxr-xr-x 6 root root 4096 Sep 6 2017 src
total 40
drwxr-xr-x 6 root root 4096 Jan 8 16:32 aegis
drwxr-xr-x 2 root root 4096 Jan 13 22:27 bin
drwxr-xr-x 10 root root 4096 Jan 6 19:29 cloudmonitor
drwxr-xr-x 2 root root 4096 Feb 16 2017 etc
drwxr-xr-x 2 root root 4096 Feb 16 2017 games
drwxr-xr-x 2 root root 4096 Feb 16 2017 include
drwxr-xr-x 4 root root 4096 Aug 17 2017 lib
lrwxrwxrwx 1 root root 9 Aug 17 2017 man -> share/man
drwxr-xr-x 2 root root 4096 Feb 16 2017 sbin
drwxr-xr-x 9 root root 4096 Jan 6 19:57 share
drwxr-xr-x 2 root root 4096 Feb 16 2017 src
total 8
drwxr-xr-x 4 admin admin 4096 Jan 6 19:30 admin
drwxr-xr-x 11 love love 4096 Jan 16 15:03 love
eg:应用上面的命令。
#!/bin/sh
DATE=`/bin/date +%F`
echo "today is $DATE"
echo '$# :' $#
echo '$* :' $*
echo '$? :' $?
echo '$$ :' $$
echo '$0 :' $0
echo '$1 :' $1
echo '$2 :' $2
运行脚本结果显示如下:
love@iZuf69ps3de0b3n4a50j7nZ:~/shelldir$ sh demo4.sh /aa /bb /cc #其中$1第一个参数/aa,/bb
#为第2个参数,demo.sh为第一个参数,/cc为第三个参数。
today is 2019-01-16
$# : 3
$* : /aa /bb /cc
$? : 0
$$ : 32300
$0 : demo4.sh
$1 : /aa
$2 : /bb