shell两个时间字符串插值_Shell 脚本速成
0x00 前言
這段時間快速把 Micropoor 的內網課程看完了一遍,里面出現了很多 Shell 腳本。
Shell 腳本有什么好處?
無需安裝其他軟件
適合任務自動化,擅長系統管理任務
通過 Shell 編程,大大提高滲透效率。
0x01 第一個 shell 腳本
功能:啟動 msfconsole
vim start_msf.sh
chmod +x start_msf.sh
# 運行
./start_msf.sh
start_msf.sh 的具體內容:
#!/bin/sh
msfconsole
0x02 引入變量
功能:輸出一個變量名
touch test.sh
chmod +x test.sh
# 運行
./test.sh
test.sh 的具體內容:
#!/bin/sh
name='變量名'
echo $name
注意:=前后不能有空格,否則就會出現?./test.sh: 2: name: not found這個錯誤,也就是說變量定義會失敗。
有時候變量名可能會和其它文字混淆,如下代碼:
#!/bin/sh
num=2
echo "this is the $numnd"
上述腳本并不會輸出?this is the 2nd,只會打印?this is the;這是由于 shell 會去搜索變量 numnd 的值,而實際上這個變量此時并沒有值。
修改方法:用花括號圈定變量名:
#!/bin/sh
# 這是一個注釋
num=2
echo "this is the ${num}nd"
注意 shell 腳本的注釋是?#。
0x03 for 循環
for var in ….; do …. done
#!/bin/sh
for var in A B C; do
echo "var is $var"
done
注:sh 不支持 C 語言風格的 for 循環寫法,所以下面的腳本一定要把 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
注意通過上面通過兩個「`」引入了命令,直接使用命令執行的結果。
0x04 while 循環
語法:
while condition
do
command
done
測試命令:
可以使用測試命令來對條件進行測試。比如可以比較字符串、判斷文件是否存在及是否可讀等等…
通常用[]來表示條件測試,注意這里的空格很重要,要確保方括號前后的空格。
[ -f "somefile" ]:判斷是否是一個文件
[ -x "/bin/ls" ]:判斷/bin/ls是否存在并有可執行權限
[ -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
注:再次注意?[]?前后的空格問題。不然結果可能出錯。
0x06 函數
函數的主要使用場景是代碼復用。函數定義部分應該寫在一個 Shell 腳本的開頭。
# 定義
functionName()
{
body
}
# 調用
functionName
無返回值函數:
#!/bin/bash
firstFunction(){
echo "1 try!"
}
firstFunction
有返回值函數:
注:read var?命令:提示用戶輸入,并將輸入內容賦值給變量 var
#!/bin/bash
funWithReturn(){
echo "這個函數會對輸入的兩個數字進行相加運算..."
echo "輸入第一個數字: "
read aNum
echo "輸入第二個數字: "
read anotherNum
echo "兩個數字分別為 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo "輸入的兩個數字之和為 $? !"
函數返回值在調用該函數后通過?$??來獲得。注意:$??僅對其上一條指令負責,一旦函數返回后其返回值沒有立即保存入參數,那么其返回值將不再能通過?$??獲得。
注意:所有函數在使用前必須定義。這意味著必須將函數放在腳本開始部分,直至 shell 解釋器首次發現它時,才可以使用。調用函數僅使用其函數名即可。
函數傳參
在 Shell 腳本中,調用函數時可以向其傳遞參數。在函數體內部,通過?$n?的形式來獲取參數的值,例如,$1表示第一個參數,$2表示第二個參數……當 n >=10 時,需要使用?${n}?來獲取參數。
帶參數的函數示例:
#!/bin/bash
# author:Snowming
funWithParam(){
echo "第一個參數為 $1 !"
echo "第二個參數為 $2 !"
echo "第十個參數為 $10 !"
echo "第十個參數為 ${10} !"
echo "第十一個參數為 ${11} !"
echo "參數總數有 $# 個!"
echo "作為一個字符串輸出所有參數 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
注意,$10?不能獲取第十個參數,獲取第十個參數需要?${10}。當 n >=10 時,需要使用?${n}?來獲取參數。
另外,還有幾個特殊字符用來處理參數:
0x07 后記
先學這么多,就基本具備了寫簡單的 Shell 腳本的能力以及讀懂別人的 shell 腳本的能力。
其實 Shell 腳本并不難,無非是多條 Linux 命令合到一起,加了一些控制語句、條件控制、變量等。
Shell 腳本語法坑多,以后想必會遇到不少問題。剩下的語法,也在實踐中慢慢補充。
本文來自作者Snowming,文章僅供學習研究網絡安全,不可用于非法用途,因為該文章而觸犯中華人民共和國法律的,一切后果自己負責,作者和平臺不承擔任何責任。
總結
以上是生活随笔為你收集整理的shell两个时间字符串插值_Shell 脚本速成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rw1601可以用C语言写程序吗,用80
- 下一篇: tika设置文件长度限制_MySQLIn