Shell 变量
定义
自定义变量
自定义变量的定义不使用关键字
变量名使用小写蛇形命名 ( snake_case )
变量值默认都是字符串类型,若含有空格则需要使用引号包裹
bash
$ 普通变量1=值
$ 普通变量1=新值
$ readonly 只读变量=值
sh
#!/bin/bash
普通变量1=值
普通变量1=新值
readonly 只读变量=值
例子:验证自定义变量的创建与更新
bash
$ a=10
$ echo $a
$ a="hello world"
$ echo $a
10
hello world
sh
#!/bin/bash
a=10
echo $a
a="hello world"
echo $a
环境变量
自定义环境变量的定义使用关键字export
变量名使用大写蛇形命名 ( snake_case )
变量值默认都是字符串类型,若含有空格则需要使用引号包裹
bash
$ export 环境变量1=值
$ export 环境变量2=值
sh
#!/bin/bash
export 环境变量1=值
export 环境变量2=值
例子:将脚本文件中的自定义环境变量导出时需要通过source
执行文件
bash
$ echo '
#!/bin/bash
$ export 环境变量1=值
$ export 环境变量2=值
' > 脚本文件.sh
$ bash 脚本文件.sh
$ source 脚本文件.sh
使用
$变量
bash
#!/bin/bash
变量1=值
变量2=$变量1
echo $变量1 $变量2
$( )
$( )
可用于将一个命令的返回值作为一个变量的值
sh
#!/bin/bash
变量=$(命令)
例子:
bash
$ files=$(ls)
$ echo $files
afs bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
(( ))
(( ))
可用于执行算术运算、比较运算
其中的变量不需要通过$
引用
sh
#!/bin/bash
(( 算数运算 ))
(( 比较运算 ))
例子:
bash
$ a=10
$ (( a++ ))
$ echo $a
11
sh
#!/bin/bash
a=10
(( a++ ))
echo $a
$(( ))
$(( ))
可用于执行算术运算的返回值作为一个变量的值
其中的变量不需要通过$
引用,作用等同于expr 算数运算
sh
#!/bin/bash
变量1=$(( 算数运算 ))
变量2=`expr 算数运算`
例子:
bash
$ a=10
$ b=$(( a * 10 ))
$ echo $b
110
$ b=`expr $b / 10`
$ echo $b
11
sh
#!/bin/bash
a=10
b=$(( a * 10 ))
echo $b
b=`expr $b / 10`
echo $b
[ ]
[ ]
可用于作为条件
[[ ]]
[[ ]]
可用于作为条件
特殊变量
$n
变量$n
可用于获取脚本接收的第n
个参数的值
bash
$ echo $序号 # 当前脚本文件接收的指定序号位置的参数的值
$ echo $0 # 当前执行的进程名
例子:验证特殊变量$1
、$2
的值
bash
$ echo '
#!/bin/bash
echo $1 $2
' > xxxx.sh
$ bash xxxx.sh 100 200
100 200
sh
#!/bin/bash
echo $1 $2
例子:验证特殊变量$0
的值
bash
$ echo '
#!/bin/bash
echo $0
' > xxxx.sh
$ bash xxxx.sh
xxxx.sh
$ echo $0
/bin/sh
$#
变量$#
可用于获取脚本接收的所有的参数的个数
bash
$ echo $#
例子:利用for
循环与特殊变量$#
打印接收的所有参数
bash
$ echo '
#!/bin/bash
echo $#
for ((i=1; i<=$#; i++)); do
echo "$i: ${!i}"
done
' > xxxx.sh
$ bash xxxx.sh 100 200 300
1: 100
2: 200
3: 300
sh
#!/bin/bash
echo $#
for ((i=1; i<=$#; i++)); do
echo "$i: ${!i}"
done
$@
变量$@
可用于将脚本接收所有的参数转为一个字符串列表,可用于循环遍历
bash
$ echo $@
例子:利用for
循环与特殊变量$@
打印接收的所有参数
bash
$ echo '
#!/bin/bash
echo $@
for arg in "$@"; do
echo "${arg}"
done
' > xxxx.sh
$ bash xxxx.sh 100 200 300
100 200 300
100
200
300
sh
#!/bin/bash
echo $@
for arg in "$@"; do
echo "${arg}"
done
$*
变量$*
可用于将脚本接收所有的参数转为一个字符串,并以空格间隔各个参数
bash
$ echo $*
例子:利用for
循环验证特殊变量$@
的值无法用于遍历
bash
$ echo '
#!/bin/bash
echo $*
for arg in "$*"; do
echo "${arg}"
done
' > xxxx.sh
$ bash xxxx.sh 100 200 300
100 200 300
100 200 300
sh
#!/bin/bash
echo $*
for arg in "$*"; do
echo "${arg}"
done
$?
变量$*
可用于获取最近一次命令的执行状态
返回值为0
时表明最近一次命令成功执行
bash
$ echo $?