日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shell两个时间字符串插值_Shell 脚本速成

發(fā)布時間:2024/9/27 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell两个时间字符串插值_Shell 脚本速成 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

0x00 前言

這段時間快速把 Micropoor 的內(nèi)網(wǎng)課程看完了一遍,里面出現(xiàn)了很多 Shell 腳本。

Shell 腳本有什么好處?

  • 無需安裝其他軟件

  • 適合任務(wù)自動化,擅長系統(tǒng)管理任務(wù)

  • 通過 Shell 編程,大大提高滲透效率。

    0x01 第一個 shell 腳本

    功能:啟動 msfconsole

    vim start_msf.sh

    chmod +x start_msf.sh

    # 運(yùn)行

    ./start_msf.sh

    start_msf.sh 的具體內(nèi)容:

    #!/bin/sh

    msfconsole

    0x02 引入變量

    功能:輸出一個變量名

    touch test.sh

    chmod +x test.sh

    # 運(yùn)行

    ./test.sh

    test.sh 的具體內(nèi)容:

    #!/bin/sh

    name='變量名'

    echo $name

    注意:=前后不能有空格,否則就會出現(xiàn)?./test.sh: 2: name: not found這個錯誤,也就是說變量定義會失敗。

    有時候變量名可能會和其它文字混淆,如下代碼:

    #!/bin/sh

    num=2

    echo "this is the $numnd"

    上述腳本并不會輸出?this is the 2nd,只會打印?this is the;這是由于 shell 會去搜索變量 numnd 的值,而實(shí)際上這個變量此時并沒有值。

    修改方法:用花括號圈定變量名:

    #!/bin/sh

    # 這是一個注釋

    num=2

    echo "this is the ${num}nd"

    注意 shell 腳本的注釋是?#。

    0x03 for 循環(huán)

    for var in ….; do …. done

    #!/bin/sh

    for var in A B C; do

    echo "var is $var"

    done

    注:sh 不支持 C 語言風(fēng)格的 for 循環(huán)寫法,所以下面的腳本一定要把 shell 指定為?bash。參考:shell腳本:Syntax error: Bad for loop variable錯誤解決方法

    #!/bin/bash

    for ((var=0;var<=3;var++)); do

    echo "var is $var"

    done

    上面的腳本更?shellish?的寫法是:

    #!/bin/bash

    for var in `seq 3`; do

    echo "var is $var"

    done

    注意通過上面通過兩個「`」引入了命令,直接使用命令執(zhí)行的結(jié)果。

    0x04 while 循環(huán)

    語法:

    while condition

    do

    command

    done

    測試命令

    可以使用測試命令來對條件進(jìn)行測試。比如可以比較字符串、判斷文件是否存在及是否可讀等等…

    通常用[]來表示條件測試,注意這里的空格很重要,要確保方括號前后的空格。

    • [ -f "somefile" ]:判斷是否是一個文件

    • [ -x "/bin/ls" ]:判斷/bin/ls是否存在并有可執(zhí)行權(quán)限

    • [ -n "$var" ]:判斷$var變量是否有值

    • [ "$a" = "$b" ]:判斷$a和$b是否相等

    示例代碼:

    #!/bin/bash

    COUNTER=0

    while [ $COUNTER -lt 5 ]

    do

    COUNTER=$((COUNTER + 1))

    echo $COUNTER

    done

    注意:

  • [?后和?]?前要空格。參考:“[0: command not found” in Bash [duplicate]

  • lt?即為?less than,小于。

  • 0x05 if 語句

    語法:

    if ....; then

    ....

    elif ....; then

    ....

    else

    ....

    fi

    $SHELL 變量:

    注意:上面的 SHELL 必須大寫。變量 $SHELL 包含了登錄 shell 的名稱。

    #!/bin/sh

    if [ "$SHELL" = "/bin/bash" ]; then

    echo "bash"

    else

    echo "your login shell is $SHELL"

    fi

    注:再次注意?[]?前后的空格問題。不然結(jié)果可能出錯。

    0x06 函數(shù)

    函數(shù)的主要使用場景是代碼復(fù)用。函數(shù)定義部分應(yīng)該寫在一個 Shell 腳本的開頭。

    # 定義

    functionName()

    {

    body

    }

    # 調(diào)用

    functionName

    無返回值函數(shù):

    #!/bin/bash

    firstFunction(){

    echo "1 try!"

    }

    firstFunction

    有返回值函數(shù):

    注:read var?命令:提示用戶輸入,并將輸入內(nèi)容賦值給變量 var

    #!/bin/bash

    funWithReturn(){

    echo "這個函數(shù)會對輸入的兩個數(shù)字進(jìn)行相加運(yùn)算..."

    echo "輸入第一個數(shù)字: "

    read aNum

    echo "輸入第二個數(shù)字: "

    read anotherNum

    echo "兩個數(shù)字分別為 $aNum 和 $anotherNum !"

    return $(($aNum+$anotherNum))

    }

    funWithReturn

    echo "輸入的兩個數(shù)字之和為 $? !"

    函數(shù)返回值在調(diào)用該函數(shù)后通過?$??來獲得。注意:$??僅對其上一條指令負(fù)責(zé),一旦函數(shù)返回后其返回值沒有立即保存入?yún)?shù),那么其返回值將不再能通過?$??獲得。

    注意:所有函數(shù)在使用前必須定義。這意味著必須將函數(shù)放在腳本開始部分,直至 shell 解釋器首次發(fā)現(xiàn)它時,才可以使用。調(diào)用函數(shù)僅使用其函數(shù)名即可。

    函數(shù)傳參

    在 Shell 腳本中,調(diào)用函數(shù)時可以向其傳遞參數(shù)。在函數(shù)體內(nèi)部,通過?$n?的形式來獲取參數(shù)的值,例如,$1表示第一個參數(shù),$2表示第二個參數(shù)……當(dāng) n >=10 時,需要使用?${n}?來獲取參數(shù)。

    帶參數(shù)的函數(shù)示例:

    #!/bin/bash

    # author:Snowming

    funWithParam(){

    echo "第一個參數(shù)為 $1 !"

    echo "第二個參數(shù)為 $2 !"

    echo "第十個參數(shù)為 $10 !"

    echo "第十個參數(shù)為 ${10} !"

    echo "第十一個參數(shù)為 ${11} !"

    echo "參數(shù)總數(shù)有 $# 個!"

    echo "作為一個字符串輸出所有參數(shù) $* !"

    }

    funWithParam 1 2 3 4 5 6 7 8 9 34 73

    注意,$10?不能獲取第十個參數(shù),獲取第十個參數(shù)需要?${10}。當(dāng) n >=10 時,需要使用?${n}?來獲取參數(shù)。

    另外,還有幾個特殊字符用來處理參數(shù):

    0x07 后記

    先學(xué)這么多,就基本具備了寫簡單的 Shell 腳本的能力以及讀懂別人的 shell 腳本的能力。

    其實(shí) Shell 腳本并不難,無非是多條 Linux 命令合到一起,加了一些控制語句、條件控制、變量等。

    Shell 腳本語法坑多,以后想必會遇到不少問題。剩下的語法,也在實(shí)踐中慢慢補(bǔ)充。

    本文來自作者Snowming,文章僅供學(xué)習(xí)研究網(wǎng)絡(luò)安全,不可用于非法用途,因?yàn)樵撐恼露|犯中華人民共和國法律的,一切后果自己負(fù)責(zé),作者和平臺不承擔(dān)任何責(zé)任。

    總結(jié)

    以上是生活随笔為你收集整理的shell两个时间字符串插值_Shell 脚本速成的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。