iT邦幫忙

2024 iThome 鐵人賽

0
Security

前端小廢物誤入 Hackthebox Module系列 第 31

第一次學 Shell Script 就上手

  • 分享至 

  • xImage
  •  

先從一個 Shell script 開始...

#!/bin/bash

# 確認特定的 file 是否存在並且是否可以被讀取
if [[ -e "$1" && -r "$1" ]]
then
	echo -e "We can read the file."
	exit 0

elif [[ ! -e "$1" ]]
then
	echo -e "The file does not exist."
	exit 2

elif [[ -e "$1" && ! -r "$1" ]]
then
	echo -e "We don't have read permission for this file."
	exit 1

else
	echo -e "Error occured."
	exit 5
fi

在此我們看到了幾個重點:
#!/bin/bash、if-else、-e、-r、exit

這些都是滿常見的語法~我們先來一一解析!


#!/bin/bash

#!/bin/bash 是什麼?

#!/bin/bash 是一個 shebang(或稱作 hashbang),用於告訴系統這個腳本應該使用哪個解釋器來執行。#!/bin/bash 具體表示這個腳本應該由 Bash shell 來執行。

逐步解釋

  • #!
    這個符號稱為 shebang,告訴操作系統這是一個可執行的腳本,並且需要使用後面指定的解釋器。

  • /bin/bash
    這是 Bash 解釋器的路徑,位於 /bin 目錄下。
    當你執行這個腳本時,系統會按照 #!/bin/bash 指定的 Bash shell 來解析和執行腳本內容。

簡單來說,#!/bin/bash 用於編寫 Bash shell 腳本,確保系統使用正確的 shell 來執行這段程式碼。

if-else

if [[ 條件1 ]]; then
    # 當條件1為真時執行的命令
elif [[ 條件2 ]]; then
    # 當條件1為假且條件2為真時執行的命令
else
    # 當條件1和條件2都為假時執行的命令
fi

範例:

#!/bin/bash

file="test.txt"

if [[ -f "$file" ]]; then
    echo "File $file exists."
else
    echo "File $file does not exist."
fi

-f 是什麼?

此處的 -f 是在 Shell Script 中用來檢查一個文件是否存在並且是否為普通文件(regular file)的條件測試運算符。它會返回 true(即條件成立)當文件存在且是普通文件時,否則返回 false(條件不成立)。

-e / -r

-e:檢查文件或目錄是否存在

-e 用來檢查指定的文件或目錄是否存在,無論它是文件還是目錄。只要存在就返回 true,否則返回 false。
用法:

if [[ -e 文件名 ]]; then
    # 文件或目錄存在
else
    # 文件或目錄不存在
fi

範例:檢查文件或目錄是否存在

if [[ -e "/path/to/file_or_directory" ]]; then
    echo "The file or directory exists."
else
    echo "The file or directory does not exist."
fi

-r:檢查文件是否可讀

-r 用來檢查指定的文件是否可讀(即當前用戶是否有讀取該文件的權限)。如果文件可讀則返回 true,否則返回 false。

if [ -r 文件名 ]; then
    # 文件可讀
else
    # 文件不可讀
fi

範例:檢查文件是否可讀

file="/path/to/file"
if [[ -r "$file" ]]; then
    echo "The file is readable."
else
    echo "The file is not readable."
fi

-e / -r 介紹 + 其他的參數

  • -e:檢查文件或目錄是否存在。
  • -r:檢查文件是否具有讀取權限(可讀)。

這兩個選項常用於腳本中進行條件檢查,以確保操作的文件存在且具有相應的權限。

以下有其他常見的參數介紹:

-d 檢查是否為目錄
-r 檢查文件是否可讀
-w 檢查文件是否可寫
-x 檢查文件是否可執行
-s 檢查文件是否非空

exit

exit 命令在 Shell Script 中用來終止腳本的執行,並可以返回一個狀態碼給操作系統或父進程。這個狀態碼通常用來指示腳本的執行結果,例如是否成功執行或者出現錯誤。

exit [n]

n 是一個可選的數字,表示腳本的退出狀態碼(exit status)。如果未指定數字,則默認返回上個命令的退出狀態碼(通常是 $? 的值)。

成功的狀態碼通常是 0。

其他非零值通常表示某些錯誤。

筆者列出一些退出狀態碼以及對應的含義:

  • 0:成功(沒有錯誤)。
  • 1:通用錯誤。
  • 2:誤用 Shell 的內建指令。
  • 126:命令無法執行。
  • 127:命令未找到。
  • 128+n:命令被信號 n 終止。
  • 130:腳本被 Ctrl+C 終止。

大概了解這些錯誤碼後,我們就可以嘗試藉由上一個指令或是腳本的退出狀態來判斷執行結果~

如:

#!/bin/bash

[some_command here]
exit_status=$?

if [[ $exit_status -eq 0 ]]; then
    echo "The command executed successfully."
else
    echo "The command failed with exit status $exit_status."
fi

上一篇
一個月的總結
系列文
前端小廢物誤入 Hackthebox Module31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言