zoukankan      html  css  js  c++  java
  • shell 编程记录

    1 文件比较运算符
    -e filename 如果 filename存在,则为真 [ -e /var/log/syslog ]
    -d filename 如果 filename为目录,则为真 [ -d /tmp/mydir ]
    -f filename 如果 filename为常规文件,则为真 [ -f /usr/bin/grep ]
    -L filename 如果 filename为符号链接,则为真 [ -L /usr/bin/grep ]
    -r filename 如果 filename可读,则为真 [ -r /var/log/syslog ]
    -w filename 如果 filename可写,则为真 [ -w /var/mytmp.txt ]
    -x filename 如果 filename可执行,则为真 [ -L /usr/bin/grep ]
    filename1-nt filename2 如果 filename1比 filename2新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
    filename1-ot filename2 如果 filename1比 filename2旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]


    2 字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
    -z string 如果 string长度为零,则为真 [ -z "$myvar" ]
    -n string 如果 string长度非零,则为真 [ -n "$myvar" ]
    string1 = string2 如果 string1与 string2相同,则为真 [ "$myvar" = "one two three" ]
    string1 != string2 如果 string1与 string2不同,则为真 [ "$myvar" != "one two three" ]


    shell脚本对空格有严格的规定,赋值语句等号两边不能有空格,而字符串比较,等号两边必须有空格

    = 与 == 在 [ ] 中表示判断(字符串比较)时是等价的


    3 算术比较运算符(只支持数字,不支持字符串,除非字符串的值是数字)
    num1-eq num2 等于 [ 3 -eq $mynum ]
    num1-ne num2 不等于 [ 3 -ne $mynum ]
    num1-lt num2 小于 [ 3 -lt $mynum ]
    num1-le num2 小于或等于 [ 3 -le $mynum ]
    num1-gt num2 大于 [ 3 -gt $mynum ]
    num1-ge num2 大于或等于 [ 3 -ge $mynum ]


    4 单引号和双引号的区别

    单引号,不进行展开
    双引号会展开


    5 local用来定义局部变量, 一般用在函数里面
       let 用来进行数学运算。

       在函数内部定义的变量, 如果没有加local, 也是全局变量


    6 shell函数定义,前面可以加function也可以不加。
    调用函数时:函数名 $1 $2 ...s
    参数个数 : $#
    所有参数内容 :$@
    $? : 上个命令的退出状态,或函数的返回值。


    7 source sh ./区别

    source 在当前shell内去读取、执行a.sh,而a.sh不需要有"执行权限"

    sh 都是打开一个subshell去读取、执行a.sh,而a.sh不需要有"执行权限" .通常在subshell里运行的脚本里设置变量,不会影响到父shell的。

    ./ 打开一个subshell去读取、执行a.sh,但a.sh需要有"执行权限"

    8 export
    export表示将当前shell的变量输出出去, 在新建shell时将会拷贝这些变量
    对于同一个shell的不同脚本之间,不需要 export也可以相互访问变量
    export的变量,才能在env显示出来


    9 dirname //获取脚本所在的文件夹路径
    cd $(dirname $0)
    DIR=$(pwd)

    10 basename
    name=$(basename $0)


    11 ``倒引号, 单引号'', 双引号 "", 小括号(), 大括号{}

    倒引号 : 如果被“倒引号”括起来, 表示里面需要执行的是命令。比如 `dirname $0`, 就表示需要执行 dirname $0 这个命令

    双引号 : 被双引号括起来的内容, 里面 出现 $ (美元号: 表示取变量名)  `(倒引号: 表示执行命令)     (转义号: 表示转义), 其余的才表示字符串。
    单引号 : 它会忽略所有被引起来的字符的特殊处理,被引用起来的字符会被原封不动的使用,唯一需要注意的点是不允许引用自身

    () 表示里面是需要执行的命令 ,  比如echo $(ls) , 表示先执行ls; 等价于echo `ls`

    {} 限定变量范围
    echo $aa_AA
    echo ${aa}_AA

    12 统计文件行数
    find /demo -name "*.js" |xargs cat|grep -v ^$|wc -l

    13 =赋值号前后不能有空格

    14 变量命名不能使用系统命令

    15 if语句

    基本用法

    if [ command ];then
       符合该条件执行的语句
    elif [ command ];then
       符合该条件执行的语句
    else
       符合该条件执行的语句
    fi
    then 与 if写在同一行时,要用; 隔开。
    test []  [[]]区别

    []和test

    两者是一样的,在命令行里test expr和[ expr ]的效果相同。

    test的三个基本作用是判断文件、判断字符串、判断整数。支持使用 ”与或非“ 将表达式连接起来。

    test中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq, -gt这种形式。

    无论是字符串比较还是整数比较都千万不要使用大于号小于号。当然,如果你实在想用也是可以的,对于字符串比较可以使用尖括号的转义形式, 如果比较"ab"和"bc":[ ab < bc ],结果为真,也就是返回状态为0.

    [[ ]]
    这是内置在shell中的一个命令,它就比刚才说的test强大的多了。支持字符串的模式匹配(使用=~操作符时甚至支持shell的正则表达 式)。逻辑组合可以不使用test的-a,-o而使用&& ||。
    字符串比较时可以把右边的作为一个模式(这是右边的字符串不加双引号的情况下。如果右边的字符串加了双引号,则认为是一个文本字符串。),而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。

    注意:使用[]和[[]]的时候不要吝啬空格,每一项两边都要有空格,[[ 1 == 2 ]]的结果为“假”,但[[ 1==2 ]]的结果为“真”!

    16  case语句

    case $变量名 in
    模式1)
    命令序列1
    ;;
    模式2)
    命令序列2
    ;;
    *)
    默认执行的命令序列
    ;;
    esac

     

    17  for 语句

    for i in {1..10}

    do

       要执行的命令序列1

       要执行的命令序列2

    done

     

     

    18  while

    while [ $i -le 100 ] //判断语句
    do
      let sum=sum+$i
      let i+=2
    done

     

     19 函数

    定义函数

    [funtion] funname()  {

      xxxx

    }

    调用

    funname

    函数参数符号说明

    $# 传递到脚本的参数个数
    $* 以一个单字符串显示所有向脚本传递的参数
    $$ 脚本运行的当前进程ID号
    $! 后台运行的最后一个进程的ID号
    $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
    $- 显示Shell使用的当前选项,与set命令功能相同。
    $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

    19 shell脚本包含别的脚本

    使用. 或者 source命令

  • 相关阅读:
    Ajax传值以及接受传值,@ResPonseBody 和 @RequestBody
    分页
    延迟加载
    mybatis的一级缓存和二级缓存
    拦截器的使用
    Session和Cookie
    逆向工程
    springmvc注解详解
    Java——变量
    Go通关04:正确使用 array、slice 和 map!
  • 原文地址:https://www.cnblogs.com/myd620/p/10790353.html
Copyright © 2011-2022 走看看