bash

作者: hehehehe | 来源:发表于2024-05-21 17:08 被阅读0次

    https://wangdoc.com/bash/script#shebang-%E8%A1%8C

    Shebang 行
    #!/bin/bash
    #!/usr/bin/env bash
    #!/usr/bin/env NAME这个语法的意思是,让 Shell 查找$PATH环境变量里面第一个匹配的NAME
    #!/usr/bin/env node
    
    chmod +x script.sh
    
    脚本参数
    $ script.sh word1 word2 word3
    
    $0:脚本文件名,即script.sh。
    $1~$9:对应脚本的第一个参数到第九个参数。
    $#:参数的总数。
    $@:全部的参数,参数之间使用空格分隔。
    $*:全部的参数,参数之间使用变量$IFS值的第一个字符分隔,默认为空格,但是可以自定义。
    
    #!/bin/bash
    # author:菜鸟教程
    # url:www.runoob.com
    
    echo "-- \$* 演示 ---"
    for i in "$*"; do
        echo $i
    done
    
    echo "-- \$@ 演示 ---"
    for i in "$@"; do
        echo $i
    done
    
    $ chmod +x test.sh 
    $ ./test.sh 1 2 3
    -- $* 演示 ---
    1 2 3
    -- $@ 演示 ---
    1
    2
    3
    
    

    如果多个参数放在双引号里面,视为一个参数。
    ./script.sh "a b"
    Bash 会认为"a b"是一个参数,$1会返回a b。注意,返回时不包括双引号

    shift 命令
    shift命令可以改变脚本参数,每次执行都会移除脚本当前的第一个参数($1),使得后面的参数向前一位,
    即$2变成$1、$3变成$2、$4变成$3,以此类推。
    
    #!/bin/bash
    
    echo "一共输入了 $# 个参数"
    
    while [ "$1" != "" ]; do
      echo "剩下 $# 个参数"
      echo "参数:$1"
      shift
    done
    
    Shell 变量

    变量名和等号之间不能有空格

    for file in `ls /etc`
    或
    for file in $(ls /etc)
    

    使用变量

    your_name="qinjx"
    echo $your_name
    echo ${your_name}
    

    变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界

    变量类型

    使用单引号 ' 或双引号 " 来定义字符串
    单引号字符串的限制:

    • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    • 单引号字符串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

    双引号的优点:

    • 双引号里可以有变量
    • 双引号里可以出现转义字符
    your_name="runoob"
    str="Hello, I know you are \"$your_name\"! \n"
    echo -e $str
    
    获取字符串长度

    string="abcd"
    echo ${#string} # 输出 4

    数组
    array_name=(value0 value1 value2 value3)
    读取数组
    ${数组名[下标]}
    valuen=${array_name[n]}
    使用 @ 符号可以获取数组中的所有元素
    echo ${array_name[@]}
    

    获取数组的长度

    # 取得数组元素的个数
    length=${#array_name[@]}
    # 或者
    length=${#array_name[*]}
    # 取得数组单个元素的长度
    length=${#array_name[n]}
    
    运算符

    算术

    #!/bin/bash
    # author:菜鸟教程
    # url:www.runoob.com
    
    a=10
    b=20
    
    val=`expr $a + $b`
    echo "a + b : $val"
    
    val=`expr $a - $b`
    echo "a - b : $val"
    
    val=`expr $a \* $b`
    echo "a * b : $val"
    
    val=`expr $b / $a`
    echo "b / a : $val"
    
    val=`expr $b % $a`
    echo "b % a : $val"
    
    if [ $a == $b ]
    then
       echo "a 等于 b"
    fi
    if [ $a != $b ]
    then
       echo "a 不等于 b"
    fi
    

    关系运算符

    #!/bin/bash
    # author:菜鸟教程
    # url:www.runoob.com
    
    a=10
    b=20
    
    if [ $a -eq $b ]
    then
       echo "$a -eq $b : a 等于 b"
    else
       echo "$a -eq $b: a 不等于 b"
    fi
    if [ $a -ne $b ]
    then
       echo "$a -ne $b: a 不等于 b"
    else
       echo "$a -ne $b : a 等于 b"
    fi
    if [ $a -gt $b ]
    then
       echo "$a -gt $b: a 大于 b"
    else
       echo "$a -gt $b: a 不大于 b"
    fi
    if [ $a -lt $b ]
    then
       echo "$a -lt $b: a 小于 b"
    else
       echo "$a -lt $b: a 不小于 b"
    fi
    if [ $a -ge $b ]
    then
       echo "$a -ge $b: a 大于或等于 b"
    else
       echo "$a -ge $b: a 小于 b"
    fi
    if [ $a -le $b ]
    then
       echo "$a -le $b: a 小于或等于 b"
    else
       echo "$a -le $b: a 大于 b"
    fi
    

    逻辑运算符

    #!/bin/bash
    # author:菜鸟教程
    # url:www.runoob.com
    
    a=10
    b=20
    
    if [[ $a -lt 100 && $b -gt 100 ]]
    then
       echo "返回 true"
    else
       echo "返回 false"
    fi
    
    if [[ $a -lt 100 || $b -gt 100 ]]
    then
       echo "返回 true"
    else
       echo "返回 false"
    fi
    

    字符串运算符

    #!/bin/bash
    # author:菜鸟教程
    # url:www.runoob.com
    
    a="abc"
    b="efg"
    
    if [ $a = $b ]
    then
       echo "$a = $b : a 等于 b"
    else
       echo "$a = $b: a 不等于 b"
    fi
    if [ $a != $b ]
    then
       echo "$a != $b : a 不等于 b"
    else
       echo "$a != $b: a 等于 b"
    fi
    if [ -z $a ]
    then
       echo "-z $a : 字符串长度为 0"
    else
       echo "-z $a : 字符串长度不为 0"
    fi
    if [ -n "$a" ]
    then
       echo "-n $a : 字符串长度不为 0"
    else
       echo "-n $a : 字符串长度为 0"
    fi
    if [ $a ]
    then
       echo "$a : 字符串不为空"
    else
       echo "$a : 字符串为空"
    fi
    
    流程控制

    if else

    if condition
    then
        command1 
        command2
        ...
        commandN 
    fi
    
    if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
    
    if condition1
    then
        command1
    elif condition2 
    then 
        command2
    else
        commandN
    fi
    

    if else 的 [...] 判断语句中大于使用 -gt,小于使用 -lt。

    a=10
    b=20
    if [ $a == $b ]
    then
       echo "a 等于 b"
    elif [ $a -gt $b ]
    then
       echo "a 大于 b"
    elif [ $a -lt $b ]
    then
       echo "a 小于 b"
    else
       echo "没有符合的条件"
    fi
    

    如果使用 ((...)) 作为判断语句,大于和小于可以直接使用 > 和 <。

    a=10
    b=20
    if (( $a == $b ))
    then
       echo "a 等于 b"
    elif (( $a > $b ))
    then
       echo "a 大于 b"
    elif (( $a < $b ))
    then
       echo "a 小于 b"
    else
       echo "没有符合的条件"
    fi
    
    for 循环
    for var in item1 item2 ... itemN
    do
        command1
        command2
        ...
        commandN
    done
    
    
    for var in item1 item2 ... itemN; do command1; command2… done;
    
    while 语句
    while condition
    do
        command
    done
    
    #!/bin/bash
    int=1
    while(( $int<=5 ))
    do
        echo $int
        let "int++"
    done
    

    相关文章

      网友评论

          本文标题:bash

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