我需要檢查我的 Bash 腳本,如果 .txt 檔案的第一行中有一個 Shebang。到目前為止,這是我的代碼:
#Lists all valid parameters#
listParameter(){
echo "Invalid parameter. Please use one of the following keywords:"
echo -e "(txxxxx | stat | all | plag)\n"
}
if [ -z $1 ]
then
listParameter
exit 1
else
if [ ${1:0:1} == "t" ]
then
if [ ! -f "$1" ]
then
echo -e "File missing. Please import $1 to this path.\n"
exit 1
else
FILE = $1
FIRSTLINE="head -n 1 $FILE"
if [FIRSTLINE == "#!"]
then
echo "Lorem Ipsum"
else
echo "Lorem Ipsum"
fi
fi
我需要通過不同的命令列引數進行不同的“測驗”。所以首先我檢查了 §1 是否以 t 開頭。比我知道它的 txxxxx 引數。txxxxx 是 txt 檔案的名稱。然后我檢查這個檔案是否存在。如果是,我想檢查檔案的第一行是否以“#!”開頭。但這不起作用,我不知道為什么。txxxxx 檔案和 bash 腳本在同一個檔案夾中。總而言之,我只是不知道如何打開和分析某個 .txt 檔案...:/
希望可以有人幫幫我。
uj5u.com熱心網友回復:
您可以使用內置的read. 您不需要像head呼叫子外殼那樣呼叫外部命令。
#!/bin/bash
file=$1
if IFS= read -r firstline < "$file" && [[ $firstline = '#!'* ]]
then
printf 'The file %s contains shebang\n' "$file"
fi
順便說一句,按照慣例,在 shell 編程中,您不應該為自己的變數使用大寫的變數名。環境變數和內部 shell 變數大寫。所有其他變數名都應該小寫。此約定可避免意外覆寫環境和內部變數。
uj5u.com熱心網友回復:
看起來您沒有執行“head -n 1...”命令,而是將其視為字串。要運行它,請使用:
FIRSTLINE=$(head -n 1 "$FILE")
那么你可能想檢查第一行是否以shebang開頭,不一定是shebang。
uj5u.com熱心網友回復:
空白很重要。該行if [FIRSTLINE == "#!"]不正確,因為它嘗試執行名為 的命令[FIRSTLINE,該命令可能不存在。你要:
if [ "$FIRSTLINE" = "#!" ]
此外,if [ -z $1 ]你應該使用而不是if [ -z "$1" ]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/392367.html
標籤:猛击
