2.1变量
按照惯例,shell变量全用大写字母加下划线表示,有两种类型的shell 变量:
- 1.环境变量:环境变量可以从父进程传给子进程,因此shell进程的环境变量可以从当前shell进程传给fork出来的子进程。
用env或printenv命令可以显示当前shell进程的环境变量。
$ env
- 2.本地变量:只存在于当前shell进程,本地变量是shell特有的概念。
使用set命令可以显示当前shell进程中定义的本地变量,环境变量和函数。
$ set
定义一个变量
$ VARNAME=value 定义变量VARNAME的值为value
一个变量定义后仅存在当前shell进程,它是本地变量
$ env | grep VARNAME
$ set | grep VARNAME
VARNAME=vaule
export可以把本地变量导出为环境变量:
$ export VARNAME
$ env | grep VARNAME
VARNAME=vaule
定义变量后直接导出为环境变量
export VARNAME=value
变量删除
unset命令用于删除已定义的环境变量或本地变量。
$ unset VARNAME
变量使用
在定义变量时不用$,取变量值时用$。变量的值都是字符串,对没有定义变量取值,其值为空。
举例
variable.sh脚本如下
#!/bin/sh
echo $SHELL
echo $SHELLabc
echo $SHELL abc
echo ${SHELL} abc
执行:
shell$ ./variable.sh
/bin/bash
/bin/bash abc
/bin/bash abc
2.2命令替换: ` , $()
由反引号扩起来的也是一条命令,shell先执行该命令,然后将输出结果立即代换到当前命令行来。命令行代换也可以用$()表示
举例
$ replace.sh
#!/bin/sh
DATE=`date`
echo $DATE
DATE=$(date)
echo $DATE
执行:
shell$ ./replace.sh
Tue Mar 1 20:56:50 CST 2022
Tue Mar 1 20:56:50 CST 2022
2.3算术代换:$(())
用于算术计算,$(())中的shell变量取值将转换成整数。
举例
calc.sh
#!/bin/sh
VAR=45
echo $(($VAR+3))
$ ./calc.sh
48
2.4单引号:’
用于保持引号内的所有字符的字面值,即使引号内的双引号, 反斜杠 和回车也不例外。
举例
single.sh
#!/bin/sh
echo 'abc\" `date`
de'
单引号内的数据都原样显示:
$ ./single.sh
abc\" `date`
de
2.5双引号:""
使用双引号保持引号内的所有字符的字面值(回车也不例外),但以下情况除外:
- 反引号用于命令替换。
- \$用于表示$
- \`用于表示反引号
- \"用于表示内嵌的双引号
- \\用于表示反斜杠 \
- 反斜杠用于非以上的情况,仅表示反斜杠
- 对变量的取值 $EXAMPLE
举例
double.sh
#!/bin/sh
echo "$SHELL"
echo "`date`"
echo "I'd say:\"Go for it\""
echo "\\"
$ ./double.sh
/bin/bash
Tue Mar 1 20:59:50 CST 2022
I'd say:"Go for it"
\
参考
Linux C编程一站式学习