• shell基础知识


    For循环基本语法

    #语法1

    for 变量名 in 值1 值2 值3。。。

    do

        程序

    done

    #语法二

    for ((初始值;循环控制条件;变量变化))

    do

        程序

    done

    while 循环

    while [ 条件判断 ]

    do

        程序

    done

    Case分支

    case $变量名 in 

    "值1")

      如果变量值等于1,则执行此程序

           ;;

    "值2")

      如果变量值等于2,则执行此程序

            ;;

    *)

         如果变量值不等于以上列出的值,则执行此程序

        ;;

    esac

    If语句

    if [ 条件判断式 ];then

        程序

    fi

    #或者(推荐)

    if [ 条件判断式 ];then

        程序

    elif [ 条件判断式 ];then

       程序

    fi

    变量定义

    定义变量:变量名=变量值,等号两边不能有空格,变量名一般习惯大写。使用变量:$变量名

    将命令返回值赋值给变量:

    A=`ls`反引号,执行里面的命令

    A=$(ls)等价于反引号

    获取变量最好加上双引号如echo "$var"

    变量的作用域

    默认情况下,shell里,定义的变量是全局变量,如果需要使用local变量,需要使用关键字local,声明为local的变量,在函数体内可以调用,函数外,不能调用。declare可以定义局部变量的类型,如数组,字符串,整形等。

     返回值

    shell中函数的返回值只能是整数,如0,1,如果非要传递字符串,可以用下面的方法

    (一)函数位置参数调用,打印返回值。reg=$(函数名 参数1 参数2) echo $reg。

    hellow=$1,world=$2

    运行结果:

     (二)脚本位置参数传递到函数

     or

     运行结果:

    位置参数变量

    $n:$0表示shell脚本本身的文件名.,如/a.sh,$1-$9代表第1到第9个参数,10以上用${}表示

    $*:命令行所有参数,且把每个参数整体对待

    $@:命令行所有参数,且把每个参数区分对待

    $#:所有参数的个数

    运算符$(())和$[]区别

    都是运行算数运算,没有区别

     函数

    系统函数:basename,dirname

    basename:用户获取文件名,删掉最后一个/前的所有部分,包括/。

    dirname:用于获取路径,删掉路径最后一个/后的多有部分,包括/.

     自定义函数

    [ function ] funname(){

        Action;

        [return int;]

    }

    #调用

    funname 参数1 参数2

    我们可以实现python里的脚本结构:

    #python

    def func1():

      pass

    def func2():

      pass

    if  __name__=='__main__':

    func1()

    func2()

    #shell

    #!/bin/bash

    func1(){

    }

    func2(){

    }

    main(){

    func1

    func2

    }

    main "$@"

    $*和$@的用法区别

    他们在for循环里的用法没有区别,如果是带命令行参数就有区别。$*表示当作一个整体,$@表示单独一个个体。

    #!/bin/bash
    for i in "$*"
    do

    echo "this arg is $i"

    done

    #!/bin/bash
    for i in "$@"
    do

    echo "this arg is $i"

    done

    运行结果

     事后处理函数

    有些时候,我们执行完脚本后,会产生一些临时文件,我们不必在脚本里rm -rf filename来一个个删除,我们可以定义一个函数来删除。然后,在需要执行的脚本最后调用这个脚本的函数即可。

     Tip

    读取文件时不要使用for loop而要使用while read

    尽量使用func(){}定义行数

    尽量使用$()将命令的返回值赋值给变量,而不是反引号

    在复杂的场景下尽量使用printf代替echo进行回显

    尽量使用[[]]来代替[]

  • 相关阅读:
    C#生成唯一值的方法汇总
    WCF中可以使用SVCUtil.exe生成客户端代理类和配置文件
    C# 打开钱箱支持北洋、佳博、爱普生
    MVC使用 Elmah 日志记录组件
    C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(一)
    C# Gma.QrCodeNet生成二维码
    支付宝支付开发——当面付条码支付和扫码支付
    微信支付四大支付模式分别有哪些区别?
    web安全测试---AppScan扫描工具
    SVN 使用学习记录
  • 原文地址:https://www.cnblogs.com/maisha/p/13091403.html
Copyright © 2020-2023  润新知