Shell脚本学习


  • operation
    bash a.sh [参数直接添加]
  • 引申
    • [` `]倒引号,被括起来表示是需要执行的命令
    • [" "]双引号,里面出现$(表示取变量名)、`(表示执行命令)、\(转义),其余的表示字符串
    • [' ']单引号,里面所有的都表示字符串,包括特殊字符
  • if-elif-else
    • 不含参
      # 查看当前目录是否存在a.sh文件
      if ls -l a.sh; then
        echo "ls return true"
      elif [ 表达式 ]
      then 
        echo "..."
      else 
        echo "ls return false"
      fi
        echo "all"
    • 含参数
      # 字符串比较 =或者==
      # 运算符两边要有空格
      # 字符串两边要有空格,才会被解析
      # []内两边要有空格
      if [ "$1" = "me" ];then
       echo "You are female..."
      else
       echo "$1 is male..."
      fi
    • 字符串比较:==、=、!=
    • 整数比较:
      -lt # 小于
      -le # 小于等于
      -gt # 大于
      -ge # 大于等于
      -eq # 等于
      -ne # 不等于
    •  逻辑判断:&&、||、!
  • for循环
    • for num in 1 2 3 4 5 six
      do
       echo "num=$num"
      done
      
      for((num=1;num<7;num++))
      do
       echo "num=$num"
      done
  • while循环
    • $常量 
      while [ "$1" = "me" ];
      do
       echo "num=$1"
       break # 终止循环
      done
    • $变量
      i=7
      j=10
      while[ $i -lt $j ]
      do 
       echo "num1=$i,num2=$j"
       ((i++))# 单括号不被解析
      done
  • dirname、$0使用
    # dirname 指定脚本所在的路径
    # $0 当前脚本的名称(包括后缀名,默认带包路径)
    # `basename $0` 直接显示脚本名称,不带包路径
    # $(命令)返回该命令的结果
    dir=`dirname $0`
    echo $dir
  • 文件测试运算符
    # 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是则返回true
    -f filename 
    # 案例:
    if [ -f `dirname $0` ];then
     echo "common"
    else
     echo "not common"
  • $?使用
    # $?获取上一个命令的退出状态
    # 步骤1:
    exit 0
    
    # 步骤2:
    if [ $? == "0" ]
    then ...
  • ln -s使用
    # 软连接
    # ln -s 源文件 目标文件
    # 作用:
    # 1.为某一个文件在另外一个位置建立一个`副本`,`副本`并不占用内存。
    # 2.而且,`副本`内容和源文件是同步的。
    # 3.若目标文件不存在,自动帮你创建文件
    vi source.log
    ln -s source.log target.log
  • > 和 >>
    # > 创建
    # >> 追加
    echo 'hello shell' > out.txt
    # > 和 >> 都会默认创建out.txt
    # > 将字符串保存到out.txt中,当out.txt存在时,首先将原文件内容清空,再追加
    # >> 将字符串直接追加到文件的末尾
  • expr
    # expr实现数值运算、数值和字符串比较、字符串匹配、字符串提取、字符串长度计算等
    # expr 算术表达式优先级低于字符串表达式、高于逻辑关系表达式
    CNT=1
    CNT=`expr $CNT + 1`
  • 新建文件夹,如果文件夹名称出现^M或者?
    # 首先打开配置文件或者shell查看当前 文件的格式
    vi a.sh
    # 查看文件格式
    :set ff
    # fileformat=dos 表示是windows下的文件需要转化为linux文件
    # 修改文件格式为unix
    :set ff=unix # 或者 :set fileformat=unix
    # 直接保存退出即可
  • $$、$!、$?、$*、$@、$#、$0
    # $$ Shell本身的PID(ProcessID)
    
    # $! Shell最后运行的后台Process的PID
    
    # $? 前一次运行的命令的结束代码(返回值)
    
    # $* 所有参数列表。
    
    # $@ 所有参数列表。
    
    # $0 当前脚本的文件名
    
    # $1...$n 分别是第一个参数...第n个参数