zoukankan      html  css  js  c++  java
  • 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进行回显

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

  • 相关阅读:
    java_IO流之 NIO
    No enclosing instance of type Outer is accessible. Must qualify the allocation with an enclosing instance of type Outer (e.g. x.new A() where x is an instance of Outer)
    JAVA I/O流 之入门
    10年老司机经验总结--程序员兼职的那些事
    python 去除html 超链接href 如何实现?
    《模式分类(原书第二版)》pdf格式下载电子书免费下载
    通知-招财猫问题通知专用
    Centos6.5 安装 python3.5 虚拟环境 virtualenvwrapper
    5.区块链平台以太坊从入门到精通之 以太网区块链网络
    4.区块链平台以太坊从入门到精通之 以太币
  • 原文地址:https://www.cnblogs.com/maisha/p/13091403.html
Copyright © 2011-2022 走看看