shell类型
- bash
- sh
- zsh
基础
定义变量时等号两边不能有空格
变量值中有空格时需要使用引号引起来(需要引用其他变量时,只能使用双引号)
a='hello' #等号两边不能有空格
echo ${a} # 引用变量的标准写法为${变量},不引起歧意的情况下可以省略花括号
echo "abc ${a}" #字符串中需引用变量时只能用双引号
- 预定义变量
$PWD
$USER
$HOME
$PATH
- 数组变量
array=(1 2 3) #使用()定义数组,变量间空格隔开
array=(`ls`) # ``可以执行任意命令并且将值返回给变量
echo ${a[*]} #打印数组中的全部变量,也可以用@代替*
echo ${#a[@]} #变量前使用’#‘表示数组长度
- 特殊符号
echo -e "a\nbb" #使用转义字符时,使用参数-e
- 变量类型
a="xx" #字符串
i=123 #数字
m=true #布尔值
n=false
p=(1 2 3)#数组
- 变量操作
echo $((a+b)) #$(())对变量进行操作,如相加$((1+2))
echo $? #?判断上条命令是否执行成功,成功返回0.失败返回1
- 掐头去尾操作
a="hello from testerhome"
echo ${a:2} #切片,切取变量a的第3位到末尾的字符串
echo ${a:2:3} #表示从第3位开始取3个
echo "${a#hello}" #要加“”,切除变量a头部的hello
echo "${a#*l}" #删除a字符串中第一个l之前的字符
echo "${a##*l}" #贪婪删除,删除a字符串中最后一个l前的字符
echo "${a%home}" #去尾,删除尾部的home字符
echo "${a%h*}" #字符串从末尾开始,删除第一个h出现后的字符,本例删完结果为hello from tester
echo "${a%%h*}" #贪婪删除,删除字符串中第一个h出现后的字符,本例删完结果为空
- 替换操作
s="hello from testerhome"
echo ${s/from/to/} #替换变量s的from为to
- 算数判断
[ 2 -eq 2 ] #相等,注意中括号左右的空格 ,也可以使用((a==2))
[ 2 -ne 2 ] #不等
[ 3 -gt 2 ] #大于(greater than)
[ 3 -ge 4 ] #大于等于
[ 3 -lt 4 ] #小于(less than)
[ 3 -le 6 ] #小于等于
[ 3 -le 3 -a 2 -le 8] #-a等同于&&
[ 3 -le 3 -o 2 -le 8] #-a等同于||
- 内置判断
[ -e file ]#文件存在为真,注意中括号左右的空格
[ -d file ]#如果文件为目录,则为真
[ -f file ]#如果文件为普通文件,则为真
[ -r file ]#如果文件可读,则为真
[ -s file ]#如果文件长度部位0,则为真
[ -w file ]#如果文件可写,则为真
[ -x file ]#如果文件可执行,则为真
- if逻辑控制
if [ condition ] ; then ... ; fi #if语句以fi结尾
if [ condition ] ; then ...; else ... ; fi
if [ condition ] ; then ...; elif ... ; fi
- for循环
#格式一
for ((i=0 ; i<n; i++)) ; do ... ; done
#格式二
for x in arr ; do ... ; done
- while循环
# 输出小于3的整数
i=0 ;while [ $i -lt 3 ] ;do echo $i ;((i=i+1));done
# 一行一行读取文件内容
while read line ;do echo $line ;done < filename # '<'为输出重定向,'>'为输入重定向,箭头指向那边,内容输入到哪边
- 退出控制
- 任务前后台运行
sleep 10& #在后台运行休眠10秒
按键ctrl+z #暂停运行休眠
jobs #查看当前任务(sleep任务暂停状态)
fg 任务号 #重启任务并调至前台
bg 任务号 #重启任务并调至后台
- 参数默认只能就收9个,超过九个时取参需要加{}
functest(){
echo "第一个参数为$1"
echo "第二个参数为$2"
echo "第10个参数为$10"
echo "第10个参数为${10}" #第10个参数需要加{}
echo "第11个参数为${11}"
echo "参数的总个数有 $# 个"
}
functest a b c d e f g h i j k l m n
- 计算
read -p 'enter the first number:' a
read -p 'enter the second number:' b
echo "$a+$b=$(($a+$b))"
echo "$a-$b=$(($a-$b))"
echo "$a*$b=$(($a*$b))"
echo "$a/$b=$(($a/$b))"
- 统计过滤数据的数量
curl -s https://testerhome.com/api/v3/topics.json | grep -o title | wc -l