Linux Shell脚本学习(2)

1.3使用变量与环境变量

shell定义了一些变量,用于保存用到的配置信息,比如可用的打印机、搜索路径等,这些变量叫做环境变量。

1.3.1预备知识

惯例用大写字母命名环境变量,用驼峰命名法或小写字母命名其他变量。

所有的应用程序和脚本都可以访问环境变量,可以使用env或者printenv查看当前shell中定义的全部环境变量:

要查看其他进程的变量用以下命令

cat /proc/$PID/environ

PID是相关进程的ID

用pgrep可以获得进程的id

特殊文件/proc/PID/environ是一个包涵环境变量以及对应变量值的列表。每个变量以name=value来描述,彼此之间用null字符(\0)来分隔。

想要生成一份易读的报表可以将cat命令的输出通过管道传给tr,将其中的\0替换成\n:

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

1.3.2实战演练

可以用等号为变量赋值:varName=value    varName是变量名,value是赋值给变量的值。如果value不包含任何空白字符(例如空格)那么就不需要将其放入引号中,否则必须用单引号或双引号。

var = value 和var=value是不一样的。两边没有空格的等号是赋值操作,加上空格的等号表示等量关系测试。

在变量名之前加上美元符号($)就可以访问变量的内容。

var="value"

echo $var也可以写成 echo ${var} 

输出:value

可以在printf、echo或其他命令的双引号中引用变量值:

#!/bin/bash

#文件名:variables.sh

fruit=apple

count=5

echo "We have $count ${fruit}(s)"

输出:We have 5 apple(s)

因为shell是使用空白字符来分隔单词,所以我们需要加上一对花括号来告诉这里的变量是fruit而不是fruit(s)。

环境变量是从父进程中继承而来的变量。例如环境变量HTTP_PROXY,它定义了Internet连接该使用哪个代理服务器。

该环境变量通常被设置为:

HTTP_PROXY=192.168.1.23:3128

export HTTP_PROXY

export声明了将由子进程继承的一个或多个变量。这些变量被导出后,当前shell脚本所执行的任何应用程序都会获得这个变量。shell创建并用到了很多标准环境变量,我们也可以导出自己的环境变量。

例如一个PATH包

echo $PATH

/home/slynux/bin:/usr/local/sbin:/usr/local/bin:/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

这样就在PATH中添加了一个/home/user/bin

还有一些众所周知的环境变量:HOME 、PWD、USER、UID、SHELL

1.3.3补充内容

1.获取字符串的长度

lenth=${#var}

举例:

var=12345678901234567890

echo ${#var}

20

2.识别当前所使用的shell

用echo $SHELL 或者echo $0

输出/bin/bash   

用环境变量SHELL可以获取

3.检查用户是否为超级用户

环境变量UID中保存的是用户ID。它可以用来检查当前脚本是以root用户还是以普通用户的身份运行的

if [ $UID -ne 0 ] ; then

 echo Non root user. Please run as root

else 

 echo Root user

fi

这里面的[是一个命令必须和前后由空格隔开

上面这个或者写成:

if test $UID -ne 0

 then

  echo Non root user. Please run as root

else

 echo Root user

fi

root用户的UID是0

4.修改Bash的提示字符串(username@hostname:~$)

打开终端或者运行shell的时候,会看到类似于user@hostname:/home/$的提示字符串。不同的GNU/Linux发布版中的提示字符串以及颜色各不相同。我们可以用PS1环境变量来定义提示字符串。默认的提示字符串是在文件~/.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可以扩展为当前工作目录

 

 

 

 

你可能感兴趣的:(菜鸟笔记,linux)