核心位置变量
$0 获取shell脚本的名称 执行如果带全路径 则$0带全路径 *****
$n n为数字 从1开始 $1为脚本的第一个参数 从$9往后 我们需要加${10} *****
$# 获取脚本传参的总个数 针对传入的个数进行判断 *****
$* 获取脚本传参的所有的参数 在循环体中不同 加上顺引号视为单个字符串 了解
$@ 获取脚本传参的所有的参数 在循环体中不同 加上双引号视为独立的参数 了解
$? 获取上一条命令的返回值 0为成功 非0失败 *****
$$ 获取脚本的PID进程号 **
$! 获取上一个在后台运行脚本的PID号 测试常用 **
$_ 获取脚本的最后一个参数或者是东东 类似esc .
子串的删除 支持通配符
1.#从前面往后删除 ## 贪婪匹配
[root@shell ~]# echo ${url#www.}
baidu.com
[root@shell ~]# echo ${url#www.}
baidu.com
[root@shell ~]# echo $url
www.baidu.com
[root@shell ~]# echo ${url#*.}
baidu.com
[root@shell ~]# echo ${url#*.*c}
om
[root@shell ~]# echo ${url#*.*.}
com
[root@shell ~]# echo ${url##*.}
com
2.从后面往前删除
[root@shell ~]# echo $url
www.baidu.com
[root@shell ~]# echo ${url%.*}
www.baidu
[root@shell ~]# echo ${url%.*.*}
www
[root@shell ~]# echo ${url%%.*}
www
3.子串的替换 /替换谁/替换成谁 /// 贪婪替换
[root@shell ~]# echo $url
www.baidu.com
[root@shell ~]# echo ${url/w/W}
Www.baidu.com
[root@shell ~]# echo ${url//w/W}
WWW.baidu.com
2.数值运算
expr 只支持整数运算
[root@shell ~]# expr oldboy
oldboy
[root@shell ~]# expr hehe
hehe
[root@shell ~]# expr 1 + 1
2
[root@shell ~]# expr 1 + 100
101
$(()) 只支持整数运算 注意不要和$()冲突了 执行的命令和``相同
[root@shell scripts]# echo $((10+10))
20
let 只支持整数运算
[root@shell ~]# let a=1+1
[root@shell ~]# echo $a
2
[root@shell ~]# let i=i+1
[root@shell ~]# echo $i
2
[root@shell ~]# let i++
[root@shell ~]# echo $i
3
[root@shell ~]# let i=i+1
[root@shell ~]# echo $i
4
直接运算 ++i i++ 相同 都是自增1
bc 支持整数和小数运算
[root@shell ~]# echo 10+10|bc
20
[root@shell ~]# echo 10+10.5|bc
20.5
[root@shell ~]# awk 'BEGIN{print 10+10}'
20
[root@shell ~]# echo 10 20|awk '{print $1+$2}'
30
[root@shell ~]# echo 10 20|awk '{print $1*$2}'
200
第二种: 常用
[ -f /etc/hosts ] # 判断是否为普通文件
[ -d file ] # 文件存在并且为目录
[ -e file ] # 文件存在则为真
[ -r file ] # 文件可读则为真
[ -w file ] # 文件可写则为真
[ -x file ] # 文件可执行则为真
比较符
INTEGER1 -eq INTEGER2 相等 -eq
INTEGER1 -ge INTEGER2 大于或者等于 -ge
INTEGER1 -gt INTEGER2 大于 -gt
INTEGER1 -le INTEGER2 小于或者等于 -le
INTEGER1 -lt INTEGER2 小于 -lt
INTEGER1 -ne INTEGER2 不等于 -ne
案例:反向破解随机数 通过MD5值破解出对应的数字
[root@shell ~]# echo $RANDOM|md5sum |cut -c1-8
2d8a8c96
[ 10 -eq 10 -o 10 -gt 20 -o 20 -lt 10 ] && echo "成立" ||echo "不成立"
成立
支持正则 [[]] && 并且 || 或者
[[ 10 -eq 10 && 10 -gt 5 ]] && echo "成立" ||echo "不成立"
三个判断
1.以返回结果判断 $?
2.判断数字是否为整数 expr
3.判断字符串不允许为空 -z
4.使用正则判断数字是否为整数 [[ $num =~ ^[0-9]+$ ]]
while循环
语法结构:
while [ 条件表达式 ] 条件表达式成立(为真)则执行 否则不执行
do
命令
done
死循环 笔试题
[root@shell day3]# cat while.sh
#!/bin/sh
while true
do
echo hehe
sleep 1
done
[root@shell day3]# cat while.sh
#!/bin/sh
i=1
while [ $i -le 10 ]
do
let i++
echo hehe
done
[root@shell day4]# cat fun.sh
#!/bin/sh
fun1(){
echo 100
return 50
}
fun1
[root@shell day4]# cat case.sh Docker
#!/bin/sh
case $1 in
Shell)
echo shell......
;;
MySQL)
echo MySQL......
;;
Docker)
echo docker......
;;
*)
echo hehe......
esac
[root@shell day4]# cat case.sh
#!/bin/sh
menu(){
cat<<EOF
1.f查看内存
2.w查看负载
3.d查看磁盘
4.l查看登录信息
5.m显示菜单
EOF
}
menu