shell类型
  • bash
  • sh
  • zsh

基础

  • 定义变量时等号两边不能有空格

  • 变量值中有空格时需要使用引号引起来(需要引用其他变量时,只能使用双引号)

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