Linux Shell之变量

下面接着翻译
在bash下,变量都默认为string类型,武林我们是否用双引号引起来。
一、准备工作
变量有通用的命名规则,当一个执行在执行的时候,它需要通过调用环境变量设置变量。在终端,通过env命令可以看到所有与终端进程相关连的环境变量。对于每一个进程而言,在它运行期间与它相关的环境变量都是可以通过以下命令在终端显示出来的:

cat /proc/$PID/environ

给PID设置相关进程的ID(PID是intger型的数据)
例如:gedit命令在运行期间,我们可以通过pgrep命令获得gedit的进程ID;

$ pgrep gedit
12501

我们可以获得进行运行相关环境变量:

$ cat /proc/12501/environ
GDM_KEYBOARD_LAYOUT=usGNOME_KEYRING_PID=1560USER=slynuxHOME=/home/slynux

注意,在环境变量多的情况下,使用这个命令非常不方便。
上述命令会以列表的形式返回环境变量和它们的值。每一个环境变量都是以name=value的形式,变量与变量之间用空格(\0)分割。如果用\n替换\0,便可以重新以variable=value的格式在每行输出。可以用tr命令实现替换,如下所示:

$ cat /proc/12501/environ | tr '\0' '\n'

现在,让我们开始了解如何分配和调整变量和环境变量。
一个变量可以被我们指定为以下格式:

var = value

var是变量的名,value是被指定的值。如果value不包含任何空格,则需要用单引号或双引号引起来。
注意“var = value”与“var=value”是完全不同的。“var = value"是错误命令。后者是规定的操作,前者是一个判断相等的操作。
通过使用前缀$和变量名来打印变量的内容:

var="value" #为var变量赋值
echo $var

或者

echo ${var}

输出结果如下:

value

我们可以使用printf或者echo命令打印双引号引起来的变量值:

#!/bin/bash
#Filename :variables.sh
fruit = applie
count=5
echo "We have $count ${fruit}(s)"

输出结果如下:

We have 5 apple(s)

在未定义的当前线程中,环境变量是可变的,它会从父进程接收值。例如HTTP_PROXY是一个环境变量。这个变量是使用网络连接的代理服务端定义的值。
通常,它会设置如下:

HTTP_PROXY=http://192.168.0.2:3128
export HTTP_PROXY

exprot命令则被用来设置env变量。现在任何应用,通过shell脚本执行都会接收这个变量。我们可以为我们的目标进程或shell脚本export传统的变量设值。在shell里有一些默认的环境变量的标准变量。
例如:PATH,一个典型的PATH变量将会包含:

$ echo $PATH
/home/slynux/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

文件路径是通过“:”分割的,通常$PATH已经被/etc/environment或者/etc/profile或者~/.bashrc定义,当我们需要给path添加新值时,可以按以下方式:

export PATH="$PATH:/home/user/bin"

也可以按以下方式:

$ PATH="$PATH:/home/user/bin"
$ export PATH
$ echo $PATH
/home/slynux/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/user/bin

我们也可以向PATH添加/home/user/bin
通常我们众所周知的环境都有:HOME/PWD/USER/UID/SHELL等待。
下面让我们通过正则表达式来分配环境变量。

查找字符串的长度
获得变量值的长度,如下:

length=${#var}

例如:

$ var=1234567890
$ echo ${#var}
20

标识当前shell
显示当前被用shell,如下:

echo $SHELL

你也可以这样用:

echo $0

例如:

$ echo $SHELL
/bin/bash
$ echo $0
bash

校验超级管理员:
UID是一个可以用来校验当前脚本是被超级管理运行还是普通管理运行的重要的环境变量,例如:

if [$UID -ne 0]; then
echo Non root user. Please run as root.
else 
echo "Root user"
fi

超级管理员的UID为0。

更改bash提示字符串(username@hostname:~$)
当我们打开一个终端或运行一个shell命令,我们可以看到一个类似于“user@hostname: /home/$.”的提示字符串。GUN与Linux的区别为显示不同的提示和不同的颜色。我们可以通过PS1环境变量设置提示信息。shell的默认提示信息是在~/.bashrc文件内配置的。

我们可以列出PS1环境变量,如下:

$ cat ~/.bashrc | grep PS1
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$ '

若想要输入特定字符串:

slynux@localhost: ~$ PS1="PROMPT>"
PROMPT> Type commands here #改变的提示字符串

我们可以使用像\e[1;31的特殊字符序列来设置字体颜色。
这里也包括一些系统参数的特殊字符。例如,\u可扩展为用户名,\h可扩展为主机名,\w扩展为当前工作目录。

猜你喜欢

转载自blog.csdn.net/qq_32403063/article/details/89485668