set — “i am” syscal student 临时设置参数值
特殊位置变量
$0
代表脚本的名称,如果全路径执行 则脚本名称带全路径
$
获取脚本传参的总个数
$*
获取脚本的全部参数
$@
获取脚本的全部参数
$和$@ 加不加双引号都是同一个结果,但是! 在循环体中,$加上双引号后,会全部输出来。把整体当成一个参数。$@则不会 如果不加双引号,则以空格为间隔,划分参数。 set — “i am” syscal student 就是四个参数,实际是三个参数
$?
获取上一条命令的返回结果 0为成功 非0失败
$$
获取脚本的pid
#将执行的脚本pid写入一个文件,这样做的好处是,不用通过查找进程的方式找到pid。
#要kill直接运行这个文件就可以了
echo $$ > /tmp/nginx_log.pid
$!
获取上一个脚本的pid
$_
获取命令行最后一个参数
数字运算
expr ``
只能用于整数运算
#!/bin/sh
read -p "请输入第一个整数" num1
expr ${num1} + 0 > /dev/null 2>&1
[ $? -ne 0 ] && echo "请输入一个整数" && exit 90001
read -p "请输入第二个整数" num2
expr ${num2} + 0 >/dev/null 2>&1
[ $? -ne 0 ] && echo "请输入一个整数" && exit 90002
echo $((${num1}+${num2}))
选项:
-p:“提示信息”:在等待read输入时,输出提示信息;
-t :秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间;
-n:字符数:read命令只接收指定的字符数就会执行;
-s:隐藏输入的数据,适用于机密信息的输入;
计算小数点
补充知识点
sh test.sh &
后台执行脚本文件
字符的删除和替换
url=www.sina.com.cn
echo ${url}
##########删除##########
#从左往右匹配删除
echo ${url#*.}
#多次匹配(也就多了一个#号)
echo ${url##*.}
#从右到左匹配删除
echo ${url%.*}
#多次匹配(也就多了一个%号)
echo ${url%%.*}
##########替换##########
#www替换成aaa
echo ${url/www/aaa}
#第一个w替换成a
echo ${url/w/a}
#贪婪匹配w,也就是匹配多个w,都变成a
echo ${url//w/a}
读取用户输入的值
#!/bin/sh
dir="/etc/hosts"
read -p "请输入一个文件名" dir
echo ${dir}
sh -x test.sh
-x 是显示执行过程
ab压力测试
ab -n 20000 -c 20000 http://127.0.0.1/index.html