zoukankan      html  css  js  c++  java
  • shell语法快速入门(1)

    #得到绝对路径
    DIR=$(cd `dirname $0`;pwd)
    $DIR/file.txt
    #去掉#注释
    egrep -v "(#|^$)" /etc/zabbix/zabbix_server.conf
     
    基本语法:
    • export 变量=变量值    声明全局变量
    • unset $变量名  清空变量
    • read  -p "真的卸载?(yes|no)"  flag
    • 使用 read [-p "提示信息" ] 变量名 声明交互变量
    • 常见环境变量$USER $LOGNAME $UID $SHELL $HOME $PWD $PATH $PS1 $PS2
    • $n (n在1-9之间)位置变量
    • 预定义变量:
                         $#传递到当前脚本的参数的总个数,
                         $*以一个单字符串显示所有向脚本传递的参数,
                         $?上一条指令执行后返回的状态,
                         $$当前所在进程的进程号,$!后台运行的最后一个进程,
                         $0当前执行的进程程序名
    • 条件判定:
                        &&成功执行一个命令,再执行下一个命令    modprobe ppp-compress-18 && echo success
                        ||一个命令执行失败后再执行下一个命令
                        ()在一个子shell里执行的一组命令     {}在当前shell里执行一组命令,修改变量值立即起效
    • 多种括号的使用
                        ((  ))多用于计算表达式    [[   ]]  语法最兼容,逻辑判断    ()   优先级最高    [   ]  逻辑判断,兼容性不高
    • 运算    加`expr $1 + 2` 减  `expr $1 -2 `  除`expr $1 / 2`  
    • 常用文件判定
          -e文件存在               -f 文件是个普通文件        -s 文件大小不为零
          -d 文件是一个目录     -b 文件是一个块设备              -c 文件是一个字符设备
           -p 文件是一个管道       -h|-L 文件是一个符号链接       -s 文件是一个socket
           -t 文件与一个终端设备相关     -r 文件是否可读           -w 文件是否可写             -x 文件是否可执行
          f1 -nt f2 文件f1比f2新    f1 -ot f2 文件f1比f2旧    f1 –ef f2 文件f1与f2是相同文件的硬链接
    • 字符串判定
                -z 字符串为null          -n 字符串不为null
    • 数值判定
                -eq 等于     –ne不等于     –gt大于 
                –ge大于等于    –lt 小于         –le 小于等于 
    • 常用判定符
                =  != 可在[ ]中使用
                <  <=  >=  > 可在双括号内 [[ ]] 使用
    • 逻辑判定
                -a 逻辑与    -o 逻辑或
     
    条件判断if
     if [ $# = 0 ] ;then           // [ =  ]间有空格, then前有;号
        ...
    elif [  $a -lt 3 ];then
    ...
    fi
    多条件判断
        if [ -n $port1 ] && [ -n $port2 ] && [ -n $port3 ] && [ -n $port4 ] && [ -n $port5 ];then
        if [ -n $port1 ] || [ -n $port2 ] || [ -n $port3 ] || [ -n $port4 ] || [ -n $port5 ];then
    注意:如果if 的条件中包含字符串变量变量,请注意使用“”,如:if [ -z "$test" ];then
     
    条件判断case
    case  $letter   in
      U|u) whoami ; ;
      L|l) ls –l / ; ;
      E|e)exit ;;
      *) echo “please input true parm!!!” ; ;
    esac
     for 循环
     (使用return  0或1来退出循环)
    格式1:
      int j=0
       for i in $arr   //$arr为链表
       do
        echo "第$j次循环"
        j=`expr $j + 1`
       done
    格式2:
        for (( i = 0; i < $len ; i++ )) ; do
            echo "第$i次循环"
        done
     
     while循环
    (使用return  0或1来退出循环)
    格式:
      While [ $num  –lt  10  ]
      Do 
      Done
     
    sample1:
        while [ $# -ne 2 ]
        do
            echo "输出$#"
            sleep 1            //休息1s
            if [ $i -eq 100 ]
            then
            break //退出
            fi
            shift
        done
     
    until循环
     (使用return  0或1来退出循环)
      Util [ $num –lt 10 ]
      Do
      Done
     
    数组
    声明
    array[key]=value #array[0]=one,array[1]=two
    declare -a array   #array被当作数组名
    array=( value1 value2 value3 ... )
    array=( [1]=one [2]=two [3]=three )
    array="one two three" # echo ${array[0|@|*]}  把array变量当作数组来处理,但数组元素只有字符串元素本身
    访问
    ${array[key]}  #${array[1]}
    ${array[@|*]}    #输出所有元素
    ${array[@]:1}    #从第二(1+1)个元素开始,后面所有的元素
    ${array[@]:0:2} #从第一(0+1)个元素开始的两个元素
    ${array[@]:1:3}  #从第二个元素开始的三个元素
    ${#array}       #计算数组第一个元素的长度
    ${#array[0]}    #同上
    ${#array[*}}     #计算数组的个数
    ${#array[@]}     #同上
    删除
    unset array[1]  #删除数组中的第一个元素
    unset array #删除整个数组
    ${array[@]#t*e} #删除字符串左边开始最短的匹配t*e
    ${array[@]##t*e} #删除字符串左边开始最长的匹配t*e
    ${array[@]%o}   #删除字符串右边开始最短的匹配
    ${array[@]%%o}   #删除字符串右边开始最长的匹配
    字串替换
    ${array[@] /o/m} #数组中所有的o都会被替换为m
    ${array[@] /o/}    #所有匹配到的o都会被删除
    ${array[@] /#o/m}  #数组已o开头的匹配将会被替换
    ${array[@] /%o/m}  #数组已o结尾的匹配将会被替换
    sample排序
    bak_date_ns=(`cat $tmpfile1|awk -F "." '{print $1}'`)   //排序前
    bak_date=($(for val in "${bak_date_ns[@]}"  //排序后
            do
              echo "$val"
            done|sort)
           )
     
    函数
    使用函数的好处:可以将一组功能打包,在同一shell中,多次调用。
    函数的声明
    function chk_clientip() #检验client_ip参数
    {
             if_net_well=0
             cle_ip=$1
             client_ip=$2
             server_ip=$3
             if [ -n "$cle_ip" ]  &&  [ -n "$client_ip" ] && [ -n "$server_ip" ];then
        if_net_well=1
             fi
            return $if_net_well
    }
    函数的调用
    chk_clientip $cle_ip $client_ip $server_ip
    result=$?    //函数执行结果,返回的$if_net_well 的值
     
    正则表达式:
    ip地址 [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$
  • 相关阅读:
    Linux下sed,awk,grep,cut,find学习笔记
    Python文件处理(1)
    KMP详解
    Java引用详解
    解决安卓中页脚被输入法顶起的问题
    解决swfupload上传控件文件名中文乱码问题 三种方法 flash及最新版本11.8.800.168
    null id in entry (don't flush the Session after an exception occurs)
    HQL中的Like查询需要注意的地方
    spring mvc controller间跳转 重定向 传参
    node to traverse cannot be null!
  • 原文地址:https://www.cnblogs.com/janehoo/p/6113463.html
Copyright © 2011-2022 走看看