zoukankan      html  css  js  c++  java
  • bash基础

     

    1           概念

    bash(sh,pdsh扩充): GNU Bourne-Again Shell

     

    sh:Bourne Shell,编程优秀,用户交互不便。         

    csh:C Shell,编程接口不如sh,用户界面友好,与C语言语法相似。      ——>tcsh

    ksh:Korn Shell,集成了sh和csh的优点,并完全兼容sh。               ——>pdsh(Public Domain Korn Shell)

    zsh

     

    2           语法

    2.1         变量,数据类型

    变量定义:不含保留字(例如“-,*”等),不含空格。

    变量的引用:赋值,for循环前不需带$;其他情况引用变量需要带"$"(例如,打印,运算等)。

    数据类型:shell变量没有数据类型。

    shell语句:=左右不能有空格;shell语句不以”;“结尾。

                                                                                                    

    2.1.1        整数运算(+-*/%):let,expr

    1)let:双引号

    例如,let "x=$x+1"

    2)expr:`,空格,特殊字符前需要使用转义符号

    例如,x=`expr $x + 4`,x=`expr $x * 4`

    【PS】不能进行浮点数运算,没有浮点数数据类型。

    【例子:算术运算,字符拼接,shell的无数据类型】

    #!/bin/bash

    x=2007

    let "x=$x+1"

    echo $x

     

    x=`expr $x + 4`

    echo $x

    echo $(expr $x / 2)

    x='Olmpic'$x

    echo x=$x

     

    y=12

    y=`expr $y * 2`

    echo $y

     

    2.1.2        赋值

    x=200

    let "x=$x+1"

    x=’hello’$x

    y=$(expr $x / 2)

    y=`expr $y * 2`

     

    result=$(($result+$num))

    num=$((num+1))

     

     

    #result=1

    num=1

    result=$(($result+$num))

    #num=$((num+1))

    #echo $result

    echo $(($a+1))

     

    #echo $num

    echo 'aaa'+$x

    echo $((-123))

    echo $(($z))

     

    2.1.3        比较操作      

    1)-eq,-ne,-gt和-ge,-lt和-le,-z(为空),-n(非空)

    2)=,!=,>(无>=),<(无<=)

    【PS】

    字符串比较时,尽量不用-z,而用!-n代替。

    能用1)尽量不用2)。

     

    2.1.4        按位操作

    &,|

    【位运算:】

    ckm@bidc:~/zzhTest> echo $(expr 1 & 0)

    0

    ckm@bidc:~/zzhTest> echo $(expr 1 | 0)

    1

    #!/bibn/bash

    if [ $str !-n ];then

    echo null!!

    fi

     

    2.2         流程控制

    2.2.1        if条件控制

    if [ expression ] ;then statements

    fi

     

    if [ expression ] ;then statements

    else   statements

    fi

     

    if [ expression ] ;then statements

    else if  [ expression ] then statements

    else  statements

    fi

     

    if [ expression ] ;then statements

    elif  [ expression ] ;then statements

    else  statements

    fi

    【PS】

    若then换行,则then前无需加;。

    [和]的后、前有空格。

     

    2.2.2        case分支结构

    case "$var" in

    cindition1 ) statements;;

    cindition2 ) statements;;

    ...

    * ) statements;;

    esac

     

     

    2.2.3        for循环

    for var in [ list ];do

     statements

    done

    【PS】

    var 变量的引用不使用$。

    <list>的元素用空格分隔。

               

     

    2.2.4        while循环

    while [ condition ]

    do

    statements

    done

     

     

    2.2.5        until循环

    until [ condition ]

    do

    statements

    done

     

     

    2.2.6        break/continue

     

    3           bash脚本例子

    【hello world】脚本的执行:hello

    #!/bin/bash

    #变量的使用

    str='hello world'

    echo $str

    echo str

     

    --执行文件

    bash hello

    sh hello

    chmod u+x hello

    hello

     

    【Linux常用命令】

    vi zzhdir

    #!/bin/bash

    ls –a

    --执行

    sh zzhdir

     

    【局部变量:局部变量的作用域(函数体内)】

    #!/bin/bash

    function test {

    local var=world

    echo $var

    }

     

    var=hello

     

    echo $var

    test

    echo $var

    【PS】局部变量:首次被赋值时,变量前面加上local。

     

    【if条件:比较操作,if条件控制结构】

    #!/bin/bash

    a=10

    if [ $a -gt 0 ]

    then echo 1

    else echo 2

    fi

     

    【if条件:带参脚本】

    #!/bin/bash

    if [ $1 = 10 ];then echo right!

    else echo wrong!

    fi

    --执行

    sh test 123

    【PS】$1用于匹配命令行的第1个参数。(bash中的保留字)

     

    【case分支】

     

    写法一:

    export LC_ALL=C    /*区分大小写*/

    var=A

    case "$var" in

    [a-z] ) echo 'lowercase letter!';;

    [A-Z] ) echo 'lowercase letter!';;

    [0-9] ) echo 'number';;

    * ) echo other character!;;

    Esac

     

    写法二:

    var=A

    case "$var" in

    [[:lower]] ) echo 'lowercase letter!';;

    [[:upper]] ) echo 'upper letter!';;

    [0-9] ) echo 'number';;

    * ) echo other character!;;

    esac

     

    【for循环:无in [list]】

    for var ;do

     echo ok

    done

    --执行

    sh test

    sh test 1  "hello world" a

     

    【for循环:i的作用域】循环体内部(do/done之间)

    for i in $(seq 5)

    do

    echo $i

    done

     

    echo $i

    --执行

    sh test

     

    【for循环:seq】

    for i in `seq 1 5`;do

    echo TEST!

    done

     

    【for循环:i的作用域】定义后的程序块

    for((i=1;i<=5;i++));do

    echo $i

    done

                                                

    echo $i

    --执行

    sh test

     

    【for循环:命令行参数】。

    for param

    do

    echo $param

    done

    --执行脚本

    sh test 123 456 789

    【PS】未指定list,将打印所有命令行参数;当没有命令行参数时,什么都不打印

     

    【while循环】

    num=1

    result=0

    while [ $num -le 3 ]

    do

    result=$(($result+$num))

    num=$((num+1))

    done

     

    echo $result

     

    【until循环】

    num=1

    result=0

    until [ $num -ge 3 ]

    do

    result=$(($result+$num))

    num=$((num+1))

    done

     

    echo $result

     

    【break/continue】

    for i in `seq 1 5`;do

    if [ $i = 3 ];the

    continue

    else echo $i

    fi

    done

     

     

    4           Vi编辑器

    命名模式:Esc键,“:”英文冒号,“wq”保存退出,“q!”强制退出

    插入模式:aAiIuU

    删除单词:dw

    删除整行:dd

    字符串查找:“/”正斜杠

     

    5           相关拓展

    保留字

    正则

    函数

    输入,输出: >,>>,2>,1>,>&

    For循环

    变量的作用:整数,字符串,计数,文件属性

     

     

    次元立方

     

  • 相关阅读:
    Java 字节码解释说明
    JVM垃圾回收:G1回收器
    JVM 参数
    HotSpot 虚拟机对象探秘
    JDK 内置图形界面工具
    Java 内存模型
    在网络设备上调试 Android 程序
    .NET MVC异步调用中的Session问题
    在MVC的ApiController中实现统一校验
    使用 AndroidX86 在虚拟机中作为调试设备
  • 原文地址:https://www.cnblogs.com/zuo-zijing/p/3965671.html
Copyright © 2011-2022 走看看