特殊环境变量

环境变量 含义 重要程度
$0 获取当前脚本的名字 如果你的脚本是全路径执行,则名字也带全路径 basename *
$n 脚本传递的参数 $0被脚本名称占用 $1开始… $9以后需要加{} *
$# 获取传参的总个数 [ $# -ne 2 ] && echo “请输入两个参数” && exit *
$? 获取上一条命令的执行结果 0为成功 非0失败 *
$$ 获取脚本的PID *
$! 获取上一个在后台运行脚本的PID *
$* 获取传参的总个数 如果不加“” 则和$@相同 在循环体如果加了“” 则把参数视为一个整体 “name age test” **
$@ 获取传参的总个数 如果不加“” 则和$*相同 在循环体如果加了“” 则把参数视为单独的参数 **
$_ 获取最后一个东东 相当于ESC .

比较符

符号 含义
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于

变量扩展的意义

符号 含义
${#oldboy} 显示这个变量的长度
${url#*.} 删除这个变量开头到第一个.的内容 包括.
${url##*.} 删除这个变量开头到最后一个.的内容 包括. (贪婪匹配)
${url%.*} 删除这个变量最后一个点到结尾的内容 包括.
${url%%.*} 删除这个变量第一个点到结尾的内容 包括. (贪婪匹配)

用于计算的命令

整数运算

echo “$((3+3))” echo “$[ 3+3 ]”
expr 3 + 3
expr $((3+3))
expr $[ 3+3 ]
let a=3+3 && echo $a

小数运算

awk ‘BEGIN{print 3+3}’
echo “3+3” |bc
python

表达式

符号 含义
-f 是否存在此文件
-d 是否存在此目录
-e 是否存
-x 是否有执行权限
-r 是否可读
-w 是否可写

语法格式
eg:

  1. [root@alice ~]# [ -f /etc/passwd ] && echo "有此文件" || echo "没有此文件"
  2. 有此文件

[root@alice ~]# test -f /etc/passwd  && echo "有此文件" || echo "没有此文件"   
有此文件

数字的比较

[ 数字1 运算符 数字2 ]
-eq -lt -gt -le -ge -ne
(()) [[ ]] = > >= <=

变量默认值

${a-defaultvalue}

a如果没有定义,则表达式返回默认值,否则返回a的值;

test]# cat default.sh 
#!/bin/bash
a=""
ret1=${a-"/usr/local"}
echo "ret1:" $ret1
test]# sh default.sh 
ret1:
test]# cat default.sh 
#!/bin/bash
#a=""
ret1=${a-"/usr/local"}
echo "ret1:" $ret1
test]# sh default.sh 
ret1: /usr/local

${a:-defaultvalue}

a没有定义或者为空字符串,则表达式返回默认值,否则返回a的值;

test]# cat default.sh 
#!/bin/bash
a=""
ret1=${a:-"/usr/local"}
echo "ret1:" $ret1
test]# sh default.sh 
ret1: /usr/local
test]# cat default.sh 
#!/bin/bash
a="/etc"
ret1=${a:-"/usr/local"}
echo "ret1:" $ret1
test]# sh default.sh 
ret1: /etc
test]#

d.gif