如何編寫一個名爲'abc'的bash shell腳本,它帶有一個參數,一個目錄的名稱,並將擴展名「.xyz」添加到所有目錄中的可見文件還沒有它如何編寫一個帶有一個參數(目錄名)的bash shell腳本
我主要編寫代碼,它改變當前目錄中的文件名,但我無法讓腳本接受參數(目錄名)並更改該目錄的文件名
#!/bin/bash
case $# in
0) echo "No directory name provided" >&2 ; exit 1;;
1) cd "${1}" || exit $?;;
*) echo "Too many parameters provided" >&2 ; exit 1;;
esac
for filename in *
do
echo $filename | grep "\.xyz$"
if [ "$?" -ne "0" ]
then mv "$filename" "$filename.old"
fi
done
其他說明包括; 在'abc'內,使用「for」控制結構循環遍歷$ 1中目錄名稱中的所有非隱藏文件名 。另外,使用帶有「ls $ 1」的命令替換 而不是一個不明確的文件名,或者您將下降到子目錄中。
編輯:問題的頂部已經低於回答,但第二部分要求我按照以下說明修改自己的代碼:
修改該活動正用於創建循環值的命令替換這將被放置到「文件名」變量中。輸出爲「grep」,而不僅僅是「ls $ 1」。 「grep」將搜索所有不以「.xyz」結尾的文件名。這可以通過「grep -v」選項輕鬆完成。使用這種方法,您可以擺脫循環內部的「echo ... | grep ...」和「if」控制結構,並且只需執行重命名即可。
我該如何去實現這個目標,因爲根據我的理解,下面的答案已經只能搜索沒有.xyz擴展名的文件名,但它不被接受。
這麼多事情沒有意義。什麼是第一個「if」條款?無論如何,你永遠不會使用'name'。爲什麼將'$ filename'回顯爲'/ dev/null'?它什麼也沒做。 – e0k