shell总结

1、对于每个进程,在其运行时的环境变量可以使用下面的命令来查看:

pgrep java
cat /proc/$PID/environ 
#替换null字符为换行显示
cat /proc/12501/environ  | tr '\0' '\n'

2、export命令用来设置环境变量。至此之后,从当前shell脚本执行的任何程序都会继承这个变量。我们可以按照自己的需要,在执行的应用程序或者shell脚本中导出特定的变量。 常见环境变量:HOME、PWD、USER、UID、SHELL等

$ 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

3、UID是一个重要的环境变量,可以用于检查当前脚本是以超级用户还是以普通用户的身份运行的。

if [ $UID -ne 0 ]; then

4、设置终端提示符,我们可以利用PS1环境变量来定制提示文本。默认的shell提示文本是在文件~/.bashrc中的某一行设置的。有一些特殊的字符可以扩展成系统参数。例如:\u可以扩展为用户名,\h可以扩展为主机名,而\w可以扩展为当前工作目录。

$PS1="[\u@\h \w]"

5、可以用普通的变量赋值方法定义数值,这时,它会被存储为字符串。然而,我们可以用一些方法使它能像数字一样进行处理。

1)let命令可以直接执行基本的算数操作。当使用let时,变量名之前不需要再添加$

let result=no1+no2  
echo $result

 2)操作符[]的使用方法和let命令类似, 在[]中也可以使用$前缀

result=$[ no1 + no2 ] 
result=$[ $no1 + 5 ]

 3)也可以使用(())

result=$(( no1 + 50 ))

 4)expr同样用于基本算数操作

result=`expr 3 + 4`  
result=$(expr $no1 + 5)

 6、文件描述符是与一个打开的文件或数据流相关联的整数。文件描述符0、1以及2是系统预留的。0 -- stdin(标准输入),1 -- stdout(标准输出),2 -- stderr(标准错误)。来自stderr的输出被丢到文件/dev/null中。/dev/null是一个特殊的设备文件,这个文件接收到的任何数据都会被丢弃。

echo "This is a sample text 1" > temp.txt 
echo "This is a sample text 1" >> temp.txt 
ls + 2> out.txt
cmd 2>stderr.txt 1>stdout.txt 
cat a* 2> err.txt
some_command 2> /dev/null ##

 有一个巧妙的方法可以一方面将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。这一切都可以使用tee来实现。

cat a* | tee out.txt | cat -n

 tee命令接收到来自stdin的数据。它将stdout的一份副本写入文件out.txt,同时将另一份副本作为后续命令的stdin。命令cat -n将从stdin中接收到的每一行数据前加上行号并写入stdout

相关推荐