美文网首页
Shell基础ideago精华版

Shell基础ideago精华版

作者: ideago | 来源:发表于2018-03-09 12:22 被阅读10次

    hello world

    #! /bin/bash 声明为bash执行

    #!/bin/bash 
    # This is a very simple example
    echo Hello World
    

    变量

    bash的变量无需声明,可以直接使用,切记 等号左右一定不能有空格

    引用变量的时候需要在变量名前面加上$符号,否则bash会视为字符串执行

    somevar='test'
    echo $somevar
    

    字符串

    $(($var*3)) $var是字符串,双括号语法支持字符串转数字,然后运算

    sips -Z $((${size_array[i]}*2)) $file_2x
    sips -Z $((${size_array[i]}*3)) $file_3x
    

    数组

    当有变量为如下格式的时候,Bash会自动创建数组

    arrary[index]=value
    
    fruits[0]='apple'
    fruits[1]='banana'
    fruits[2]='orange'
    echo ${fruits[1]}
    

    访问数组元素使用花括号,${array[index]}

    声明一个数组,并初始化

    array=(element1 element2 element3)

    输出整个数组

    echo ${array[@]}

    获取数组长度

    ${#array[@]}

    获取数组第n个元素的长度

    ${#array[n]}

    #! /bin/bash
    Unix[0]='Debian'
    Unix[1]='Red hat'
    Unix[2]='Ubuntu'
    Unix[3]='Suse'
    echo ${#Unix[3]} # length of the element located at index 3 i.e Suse
    

    添加数组元素

    Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
    Unix=("${Unix[@]}" "AIX" "HP-UX")
    echo ${Unix[7]}
    

    "AIX"和"HP-UX"被添加到数组的第7位和第8位

    删除数组元素

    使用模式(patterns)删除数组元素

    按pattern过滤之后存储剩余元素到一个新数组

    #!/bin/bash
    declare -a Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora');
    declare -a patter=( ${Unix[@]/Red*/} )
    echo ${patter[@]}
    
    $ ./arraymanip.sh
    Debian Ubuntu Suse Fedora
    
    

    上面的例子删除数组元素形式如Red*

    流程控制

    条件选择

    -z检测字符串长度为0, -n 检测字符串不为0

    如果then和if写在同一行的话,then前面要加;

    if [ -z $a ];then 
      echo '$a is empty'
    fi
    

    if - then - else - fi 语法

    if [ ${size_array[i]} != "1024" ]
    then
        file_2x=$out_dir/icon-${size_array[i]}@2x.png
        file_3x=$out_dir/icon-${size_array[i]}@3x.png
        cp $source_file $file_2x
        cp $source_file $file_3x
        sips -Z $((${size_array[i]}*2)) $file_2x
        sips -Z $((${size_array[i]}*3)) $file_3x
    else
        file_1024=$out_dir/icon-1024.png
        cp $source_file $file_1024
        sips -Z 1024 $file_1024
    fi
    

    for循环

    打印目录下所有的文件

    #!/bin/bash
    for i in $( ls ); do
        echo item: $i
    done
    

    打印序列

    #!/bin/bash
    for n in $(seq 1 10);
    do
       echo $n
    done
    

    while循环

    i=2 
    while [[ $i -le 19 ]]; do
        file="demo"$i".js"
        echo $file
        cp demo1.js $file
        let i=i+1
    done
    

    until语法

    #!/bin/bash
    counter=$1
    until [ $counter -lt 10 ];
    do
       echo the counter:$counter
       let counter=counter-1
    done
    

    函数

    local声明为局部变量

    function hello { 
        local HELLO=World 
        echo  HELLO  
    }
    

    比较运算

    字符串比较运算符

    比较符 说明 举例
    -z string 如果长度为零则为真 -z $somevar
    -n string 如果长度不为零则为真 -n $somevar
    str1 = str2 如果str1与str2相同,则为真 $str1 = $str2
    str1 != str2 如果长度为零则为真 $str1 != $str2

    算术比较符

    比较符 说明 举例
    -eq 等于 $1 -eq 10
    -ne 不等于 $1 -ne 10
    -lt 小于 $1 -lt 10
    -gt 大于 $1 -gt 10
    -le 小于或等于 $1 -le 10
    -ge 大于或等于 $1 -ge 10

    continue,break,exit 0

    continue,break和主流语言一致

    bash好像不支持return ,可以用exit 0 退出脚本

    相关文章

      网友评论

          本文标题:Shell基础ideago精华版

          本文链接:https://www.haomeiwen.com/subject/viypfftx.html