命令排序
- 在一行,敲多个命令,;不具逻辑判断
. /config ; make ;makeinstall
- && || 具备逻辑判断,要看命令返回值 echo $?
. /config && make && makeinstall
ping -cl 10.18.42.1 &> /dev/null && echo "up" || echo "down" # &>/dev/null 混合重定向
- 其它
command & # 后台执行
command &>/dev/null #混合重定向
command1 && command2 命令排序,逻辑判断(上一个命令的返回值为真,才会执行)
通配符(元字符) 表示的不是本意
* 匹配任意多个字符 ls in*; rm -rf *; rm -rf *.pdf;find / -iname "*-eth0"
? 匹配任意一个字符 touch love loove live 7ve;ll | ?ve
[] 匹配括号中任意一个字符 [abc][a-z][0-9][a-zA-Z0-9][^a-zA-Z0-9]
() 在子shell中执行(cd /boot;ls) (umask 077;touch file 1000)
{} 集合 touch file {1..9}
#mkdir /home/{111,222} ; mkdir /home/{333/{aaa,bbb},444}
\ 转义符,让元字符回归本意
# echo \*
变量
1.自定义变量
定义变量:变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip1=192.168.2.115
引用变量:$变量名 或 ${变量名}
查看变量:echo $变量名;set (所有变量:包括自定义变量和环境变量)
取消变量:unset变量名
作用范围:仅在当前shell中有效
2.环境变量
定义环境变量:方法一 export back_dir2=/home/backup
方法二 export back_dir1 将自定义变量转换成环境变量
引用环境变量:$变量名 或 ${变量名}
查看环境变量:echo $变量名;env 例如env | grep back_dir2
取消环境变量:unset 变量名
变量作用范围:在当前shell和子shell有效
3.位置变量
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
4.预定义变量
$0 脚本名
$* 所有参数
$@ 所有参数 # 没有被双引号包含时,$*和$@作用一样,但被双引号包含时,$@无区别,$*会将所有参数看作一个整体
$# 参数个数
$$ 当前进程的PID
$! 上一个后台进程的PID
$? 上一个命令的返回值 0表示成功
5.变量的赋值方式
1.显示赋值
变量名=变量值
示例:
IP1=192.168.1.251
today=`date+%F`
2.read从键盘读入变量值
read 变量名
read -p "提示信息:" 变量名
注意事项
"" 弱引用
'' 强引用
`` 等价于 $()
touch `date +%F`_file.txt
touch $(date +%F)_file.txt
disk_free3=$(df -Ph | grep '/$' | awk '{print $4}')
disk_free3=`df -Ph | grep '/$' | awk '{print $4}'`
6.变量的运算
1.整数运算
expr expr 1+2
$(())
echo $((num1+num2))
echo $((1+2))
$[]
echo $[5+2]
let
let sum=2+3;echo $sum;
let i++;echo $i;
2.小数运算
echo "2*4" | bc
echo "scale=2,6/4" | bc
awk 'BEGIN{print 1/2}'
7.变量内容的删除和替换
删除
url=www.sina.com.cn
echo ${#url} 获取变量的长度
echo ${url} 标准查看
echo ${url#*.} 从前往后,最短匹配 ,sina.com.cn
echo ${url##*.} 从前往后,最长匹配,cn
echo ${url%.*} 从后往前,最短匹配 www.sina.com
echo ${url%%.*} 从后往前,最长匹配 www
索引及切片
echo ${url:0:5} www.s
echo ${url:5:5} 根据索引下标截取
echo ${url:5}
替换
echo ${url/sina/baidu} www.baidu.com.cn
echo ${url/n/N} www.siNa.com.cn
echo ${url//n/N} www.siNa.com.cN 贪婪匹配
替代
echo ${var1-aaaa}
${变量名-新的变量值} 变量没有被赋值:会使用新的变量值替代;变量有被赋值(包括空值):不会被替代
${变量名:-新的变量值} 变量没有被赋值(包括空值):都会使用新的变量值替代;变量有被赋值:不会被替代
${var3+aaa} ${var3:+aaa}
${var3=aaa} ${var3:=aaa}
${var3?aaa} ${var3:?aaa}