shell两个时间字符串插值_Shell 脚本速成
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rw1601可以用C语言写程序吗,用80
- 下一篇: 北京计算机一级2020,2020北京市一