shell中一些常用变量和符号用法总结

1.shell中变量$相关的含义:

$$ :Shell本身的PID(ProcessID);
$! :Shell最后运行的后台Process的PID;
$? :状态值,最后运行的命令的结束代码(返回值),一般指令程序执行成功值为 0,失败为 1
通过一个简单的脚本,执行后了解各个变量的意义

[root@server1~]# vi variable.sh
#!/bin/sh
echo "number:$#"
echo "shname:$0"
echo "First :$1"
echo "Second:$2"
echo "Parameter List:$@"   ##保存退出
[root@server1~]# chmod +x variable.sh   ##赋予脚本执行权限
[root@server1~]#./variable.sh a b ##传参 a b 执行脚本 , 输出如下:
number:2
shname:./variable.sh
First: a
Second:b
Parameter List:a b
  • $# :是传给脚本的参数个数,常用于循环
  • $0 : 是脚本本身名称
  • $1 :是传递给该shell脚本的第一个参数
  • $2 : 是传递给该shell脚本的第二个参数
  • $@: 是传给脚本的所有参数列表
  • $@ 与 $* 都是列出脚本的所有参数;当它们被双引号" "包含时,符号 $* 将所有的引用变量视为一个整体,以"$1 $2 … $n"的形式组成一个整串;但符号 $@ 则仍旧保留每个引用变量的区段观念,以"$1" "$2" … "$n" 的形式组成一个参数列表。
    备注:引用变量的代表方式: $0, $1, $2, $3, $4, $5, $6, $7, $8, $9, ${10}, ${11}... 个位数可直接使用数字,但两位数以上则必须使用 {} 符号来括住。

2.shell 中一些符号的用法:

  • ; 分号 担任 "连续指令"功能的符号。eg:cd ~/backup ; mkdir startup ;cp ~/.* startup/. 其中~ 代表使用者的 home 目录,~+ 符号代表当前的工作目录,~-符号代表上次的工作目录。
  • ' ' 单引号 被单引号用括住的内容,将被视为单一字串。若引号内有变量$符号则视为一般符号处理,不作变量替换。
  • " " 双引号 被双引号用括住的内容,防止通配符扩展,但允许变量扩展eg hh=home echo \"$hh\" # 输出 home
  • `` 反引号 反引号一般用作赋值 ,$() 和 反引号功能类似
P= `cat ${PARAM_FILE} | grep '{ETL_TIME}=' | awk -F '{ETL_TIME}=' '{print $2}'`    ## 运行反引号里面的命令,把结果返回给变量P
P=$(at ${PARAM_FILE} | grep '{ETL_TIME}=' | awk -F '{ETL_TIME}=' '{print $2}')   ## 也是运行括号内的内容并把结果返回给变量P
  • | 管道符号 连接上个指令的标准输出,做为下个指令的标准输入eg:grep *.log | wc -l
  • ! 叹号 通常它代表反逻辑的作用,用 != 来代表"不等于" if [ "$?" != 0 ] then echo "Executes error" exit 1 fi;规则表达式中担任 “反逻辑” 的角色 ls a[!0-9] 表示显示除了a0, a1 … a9 这几个文件的其他文件
  • : 冒号 在 bash 中这是一个内建指令:什么事都不做,但返回状态值 0,
    例如: ${HOSTNAME?} ${USER?} ${MAIL?}检查这些环境变数是否已设置,没有设置的将会以标准错误显示错误讯息
  • ? 问号 在文件名扩展上匹配一个任意的字元,但不包含 null 字元, 例如ls 201?05
  • * 星号 在文件名扩展上用来代表任何字元,包含 null 字元,在运算时则代表乘法
  • $ 钱号 变量替换(Variable Substitution)的代表符号vrs=123 echo "vrs = $vrs" ##vrs = 123,另外在grep、sed、awk、vi中被定义为行的最末端
  • ${ } 变量的正规表达式,用来作变量替换
    一般情况下$var 与 ${var} 并没有什么不一样,但是用 ${ } 会比较精确的界定变量名称的范围
    例如A=B echo $AB 原本是打算先将 $A 的结果替换出来,然后再补一个 B 字母于其后,但在命令行上,真正的结果却是只会提换变量名称为 AB 的值出来;若使用 ${ } echo ${A}B 就能输出BB了
  • ( ) 指令群组 用括号将一串连续指令括起来,这种用法对 shell 来说,称为指令群组
  • (( )) 用在算数运算上,是 bash 的内建功能,例如#!/bin/bash (( a = 10 )) echo -e "inital value, a = $a\\n" (( a++)) echo "after a++, a = $a"
  • [ ] 中括号 常出现在流程控制中,括住判断式的作用,例如if [ \"$?\" != 0 ] then echo "Executes error" exit1 fi ;例如rm -r 201[1234] 表示删除 2011, 2012, 2013, 2014 目录的意思
  • [[ ]][ ] 符号基本上作用相同,但允许在其中直接使用 || 与&& 逻辑等符号,例如#!/bin/bash read akif [[ $ak > 5 || $ak< 9 ]]then echo $akfi
  • { } 大括号 大括号中会夹着一段或几段以"分号"做结尾的指令或变数设定cat ftmp-02 #!/bin/basha=fsh{a=inbc ; echo -e "\\n $a \\n"} echo $a #./ftmp-02 inbcinbc;另外这种大括号的组合,常用在字串的组合上,例如mkdir {userA,userB,userC}-{home,bin,data} 创建了 userA-home, userA-bin, userA-data, userB-home, userB-bin,userB-data, userC-home, userC-bin,userC-data这几个目录;例如chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
  • || 逻辑符号 代表 or 逻辑的符号
  • && 逻辑符号 代表 and 逻辑的符号
  • & 后台工作 单一个& 符号,且放在完整指令列的最后端,即表示将该指令列放入后台中工作
  • = 等号 常在设定变数时看到的符号 var=123 echo "var = $var"
  • == 等号 常在条件判断式中用到,代表等于的意思 if [$vara == $varb]
  • != 不等于 常在条件判断式中用到,代表不等于的意思 if [$vara != $varb]
  • ^ 符号在规则表达式中,代表行的开头;在[]中也与 ! 一样表示非
  • > >> < << :> &> 2&> 2<>>& >&2 输出/输入重导向
    cmd > file 把cmd命令的输出重定向到文件file中,如果file已经存在,则清空原有文件
    cmd >> file 把cmd命令的输出重定向到文件file中,如果file已经存在,则把信息加在原有文件后面
    cmd < file cmd命令从file读入
    cmd << text 从命令行读取输入,直到一个与text相同的行结束;使用引号把输入括起来,此模式将对输入内容进行shell变量替换;如果使用<<- ,则会忽略接下来输入行首的tab
    cmd <> file 以读写模式把文件file重定向到输入,文件file不会被破坏
    cmd >| file 功能同>,但即便在设置了noclobber时也会复盖file文件
    : > filename 把文件filename截断为0长度,如果文件不存在,就创建一个0长度的文件(与touch的效果相同)
    cmd >&n 把输出送到文件描述符n
    cmd m>&n 把输出 到文件符m的信息重定向到文件描述符n
    cmd >&- 关闭标准输出
    cmd <&n 输入来自文件描述符n
    cmd m<&n m来自文件描述各个n
    cmd <&- 关闭标准输入
    cmd <&n- 移动输入文件描述符n而非复制它
    cmd >&n- 移动输出文件描述符 n而非复制它
    >& 实际上复制了文件描述符,这使得cmd > file 2>&1与cmd 2>&1 >file的效果不一样
发布了52 篇原创文章 · 获赞 7 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/hyfstyle/article/details/89499648