zoukankan      html  css  js  c++  java
  • linux bash 的基础语法

    示例均来自网络,附带有原始链接地址,自己练习整理发出,均测试可用

    linux shell 基本语法 - 周学伟 - 博客园
    https://www.cnblogs.com/zxouxuewei/p/6393092.html

    变量声明和赋值

    定义变量,等号左右不要有空格

    通过export 变成全局变量

    #!/bin/bash
    #a.sh
    a=666
    b=hello
    g_user=root
    export g_user#全局变量
    echo $a
    echo $b
    echo $g_user
    
    #调用 
    bash a.sh
    

    把命令结果赋值给变量

    1. 圆括号
    current_date=$(date)
    echo current data is [$current_date]
    
    1. 用反引号,和键盘上的波浪符号一个键(仅参考,使用1即可)
    current_date=`date`
    echo current data is [$current_date]
    
    1. 花括号加反引号(仅参考,使用1即可)
    current_date={`date`}
    echo current data is [$current_date]
    

    if条件判断

    #!/bin/bash
    #a.sh
    if [[ $1 == 1 ]]; then
        echo "first argument is 1"
    else
        echo "first argument is not 1"
    fi
    
    #调用 
    bash a.sh 1
    

    case分支判断

    #!/bin/bash
    #a.sh
    case $1 in
        1)
            echo "the case is 1"
        ;;
        2)
            echo "the case is 2"
        ;;
        3)
            echo "the case is 3"
        ;;
        4)
            echo "the case is 4"
        ;;
        *)
            echo "no case match first argument"
        ;;
    esac
    
    #调用 
    bash a.sh 2
    

    for循环语句

    形式一

    #!/bin/bash
    #a.sh
    for (( i = 0; i < 10; i++ )); do
        echo "current value is $i"
    done
    
    #调用 
    bash a.sh
    

    形式2

    #!/bin/bash
    #a.sh
    for i in 1 2 3 4 5; do
        echo "current value is $i"
    done
    
    #调用 
    bash a.sh
    

    while循环

    #!/bin/bash
    #a.sh
    i=$1
    
    while [[ $i > 0 ]]; 
    do
        echo "now i's value is $i"
        let "i=i-1"
    done
    
    #调用 
    bash a.sh 10
    

    函数

    shell自定义函数 - 立志做一个好的程序员 - 博客园
    https://www.cnblogs.com/oxspirt/p/7246075.html

    • 1、必须在调用函数地方之前,声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译。一次必须在使用函数前先声明函数。
    • 2、total=$(fSum 3 2); 通过这种调用方法,我们清楚知道,在shell 中 单括号里面,可以是:命令语句。 因此,我们可以将shell中函数,看作是定义一个新的命令,它是命令,因此各个输入参数直接用空格分隔,命令里面获得参数方法可以通过:(0…)n得到。 $0代表函数本身。
    • 3、函数返回值,只能通过$?系统变量获得,直接通过=获得是空值。其实,我们按照上面一条理解,知道函数是一个命令,在shell获得命令返回值,都需要通过$?获得。
    • 4.可以带function fun()定义,也可以直接fun() 定义,不带任何参数。
    • 5.参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
    #!/bin/bash
    #a.sh
    function add()
    {
        echo "arg1 is $1,arg2 is $2"
        return $(($1+$2))
    }
    
    plus()
    {
        echo "arg1 is $1,arg2 is $2"
        return $(($1*$2))
    }
    
    value=$(add $1 $2);
    echo "[echo value:$value,function add value:$?]"
    
    value=$(plus $1 $2);
    echo "[echo value:$value,function plus value:$?]"
    
    #调用 
    bash a.sh 5 7
    

    数组

    #!/bin/bash
    #a.sh
    name=(a bbb c d e f g) #数组
    length=${#name[@]} #获取数组长度
    
    echo length1:${#name[@]} #获取数组长度
    echo length2:${#name[*]} #获取数组长度
    echo length3:${#name[1]} #取得数组单个元素的长度
    
    for (( i = 0; i < $length; i++ )); do
        echo value $i=${name[$i]} #读取数组的值
    done
    
    #调用 
    bash a.sh
    

    I/O

    Shell中重定向的深入讲解_linux shell_脚本之家
    https://www.jb51.net/article/142918.htm

    >  输出重定向,覆盖方式
    >> 输出重定向,追加方式
    <  输入重定向
    << 标准输入来自命令行的一对分隔号的中间内容
    

    实例

    #生成 input.txt
    cat <<EOF>input.txt
    zhao
    qian
    sun
    li
    zhou
    wu
    zheng
    wang
    EOF
    
    #将input.txt文件作为sort命令的输入
    sort < input.txt
    
    # 将排序后的结果输出到input.sort.txt文件中
    sort < input.txt >input.sort.txt
    
    # 将排序后的结果追加输出到input.txt文件中
    sort < input.txt >> input.txt
    
    #将标准输入重定向为input.txt文件,标准输出重定向为input2.txt文件(追加),将标准错误重定向为error文件
    sort 0< input.txt 1>> input2.txt 2> input.error.txt
    

    一个程序的的输入可以来自于键盘,也可以来自于文件或者其他设备;同样的,一个程序也可以将输出显示在屏幕或者保存到文件中。这就涉及到标准输入标准输出标准错误

    程序的输入是标准输入,默认是键盘,用户可以将其指定为文件或其他设备。

    程序的输出有两种,即标准输出和标准错误,其中标准输出是程序的正常输出、标准错误是程序的错误输出。二者默认都被指定为屏幕,用户可以将其指定为文件或其他设备。

    每个输入源和输出地都有一个描述符,标准输入的描述符为0,标准输出的描述符为1,标准错误的描述符为2。

    EOF

    linux下EOF写法梳理 - 散尽浮华 - 博客园
    https://www.cnblogs.com/kevingrace/p/6257490.html

    执行脚本的时候,需要往一个文件里自动输入N行内容。如果是少数的几行内容,还可以用echo追加方式,但如果是很多行,那么单纯用echo追加的方式就显得愚蠢之极了!
    这个时候,就可以使用EOF结合cat命令进行行内容的追加了。

    EOF是END Of File的缩写,表示自定义终止符.既然自定义,那么EOF就不是固定的,可以随意设置别名,在linux按ctrl-d就代表EOF.
    EOF一般会配合cat能够多行文本输出.

    #把EOF的内容作为cat 的输入
    cat <<EOF
    aaa
    bbb
    ccc
    EOF
    
    #把EOF的内容作为cat 的输入,并把cat的输出定向到a.txt
    cat <<EOF > a.txt
    aaa
    bbb
    ccc
    EOF
    

    getopts

    获取参数定义

    #!/bin/bash
    #a.sh
    
    while getopts "a:b:c:r:" arg; do
       case $arg in 
        a)
            a=$OPTARG
        ;;
        b)
            b=$OPTARG
        ;;
        c) 
            c=$OPTARG
        ;;
        r)
            repo=$OPTARG
        ;; 
        ?)
            echo you need help
        ;;
       esac
    done
    
    echo "a:$a,b:$b,c:$c,repo:$repo"
    
    #调用 
    bash a.sh -a 3 -b 4 -c 5 -r 6
    
  • 相关阅读:
    【分布式】缓存穿透、缓存雪崩,缓存击穿解决方案
    mongodb常用查询语法
    依据记录总数和每页大小取页数(转)
    SpringBoot普通类中如何获取其他bean例如Service、Dao(转)
    RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较(转)
    java中job运行时间
    如何查看某个端口被谁占用
    Push to origin/master was rejected (Git提交错误)(转)
    curl网站开发指南
    2012 不宜进入的三个技术点(中)
  • 原文地址:https://www.cnblogs.com/DHclly/p/11388310.html
Copyright © 2011-2022 走看看