变量和环境变量
脚本语言常常在使用变量前不需要声明变量的类型。在 Bash 中,每个变量的值都是一个字符串,不管是带了引号,还是没带引号。还有一些变量被shell环境以及操作系统环境用来存一些特殊值,这些变量被称为环境变量。
要查看一个 terminal 所关联的所有环境变量,用 env 命令就行了。对于每一个进程,要查看进程运行时所关联的环境变量,请用 cat /proc/$PID/environ 命令,其中$PID要替换成一个进程的PID值。例如,假设有一个叫gedit 的应用正在运行。我们可以用 pgrep gedit 命令获取它的进程ID,假如是 12501,那么刚才的命令就应该是 cat /proc/12501/environ,输出就是一些名值对,名值对于名值对之间通过 null character (\0)分隔。如果你能够将 \0 替换成 \n,那结果就是一行一行的名值对了。最终的命令就是:
cat /proc/12501/environ | tr '\0' '\n'
var=value,如果value包含空格字符,那就需要用引号将值括起来,单引号双引号都行。注意 var = value和
var=value是不同的。前者是相等性操作,而后者是赋值操作。要打印一个变量的值,在变量名前加一个$前缀,所以就是 echo $var 或 echo ${var}
我们可以在 printf 和 echo 中的双引号中使用变量值:
#!/bin/bash
#Filename :variables.sh
fruit=apple
count=5
echo "We have $count ${fruit}(s)"
输出结果是:We have 5 apple(s)
环境变量不是在当前进程中定义的,而是从父进程中接收。例如,HTTP_PROXY 是一个环境变量,该变量定义了对于一个Internet连接,应当使用哪个代理服务器。export 命令用于设置 env 变量。
通常,$PATH 是定义在 /etc/environment 或 /etc/profile 或 ~/.bashrc 中。一些熟知的环境变量包括 HOME、PWD、USER、SHELL等等。
获取一个字符串的长度:length=${#var},例如:
$ var=12345678901234567890$
echo ${#var}
20
获取当前SHELL:用 echo $SHELL 或 echo $0
Checking for super user:UID 是一个重要的环境变量,可以被用来检查当前脚本是否是作为 root 用户 还是作为平常用户来执行的。如果是 root 用户,则该变量的值是0。
if [ $UID -ne 0 ]; then
echo Non root user. Please run as root.
else
echo Root user
fi
定制 shell 提示符:通过 PS1 环境变量。shell 的默认提示文本就是定义在 ~/.bashrc 中。
$ cat ~/.bashrc | grep PS1 就能知道提示文本是如何定义的了。