Bash

Bash 腳本分段錯誤

  • May 16, 2022

我的任務是編寫一個 bash 腳本,它讀取一個目錄並返回其中每個文件的文件類型,包括所有子目錄。不允許使用 find 命令。我嘗試使用兩個 for 循環來實現這一點,但我遇到了分段錯誤。但是,當我傳遞沒有子目錄的目錄時,我發現該腳本確實有效。有人願意查看菜鳥的程式碼並告訴我出了什麼問題嗎?非常感謝。

#!/bin/bash
func () {
for name in $1
do
 if [ -f "$name" ]
 then
   file "$name"
 elif [ -d "$name" ]
 then
   func "$1"
 fi
done
}

directory="$1/*"
for name in $directory
do
 if [ -f "$name" ]
 then
   file "$name"
 elif [ -d "$name" ]
 then
   func "$1"
 fi
done

如果$name它正在處理的“”是一個目錄,你需要呼叫func它的內容,而不是原始參數,否則你會得到一個無限循環,因此會出現段錯誤。

通過在原始參數上使用函式可以大大減少您的程式碼,並將該函式分別應用於每個項目。現在,無論如何,您都在重複主體函式中發生的大部分內容。

#!/bin/bash
func () {
   local arg="$1"
   if [[ -f "$arg" ]] ; then
       file -- "$arg"
       return
   fi
   if [[ -d "$arg" ]] ; then
       for file in "$arg"/* ; do
           func "$file"
       done
   fi
}

func "$1"

引用自:https://unix.stackexchange.com/questions/702776