set — “i am” syscal student 临时设置参数值

特殊位置变量

$0

代表脚本的名称,如果全路径执行 则脚本名称带全路径

$

获取脚本传参的总个数

$*

获取脚本的全部参数

$@

获取脚本的全部参数

$和$@ 加不加双引号都是同一个结果,但是! 在循环体中,$加上双引号后,会全部输出来。把整体当成一个参数。$@则不会 如果不加双引号,则以空格为间隔,划分参数。 set — “i am” syscal student 就是四个参数,实际是三个参数

$?

获取上一条命令的返回结果 0为成功 非0失败

$$

获取脚本的pid

  1. #将执行的脚本pid写入一个文件,这样做的好处是,不用通过查找进程的方式找到pid。
  2. #要kill直接运行这个文件就可以了
  3. 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