windows上測試可以安裝Git
linux中,准備刪除文件的腳本deleteFile.sh,picture.txt保存待刪除文件的文件路徑,picture文件夾下面有三張待刪除圖片a/b/c.jpg
deleteFile.sh腳本如下:
!/bin/bash
shell腳本 保存路徑的文本
./deleteFile.sh ./picture.txt
判斷位置參數是否為1
if [ $# -ne 1 ];then
echo "Usage $0 filename"
exit
fi
判斷位置參數是否為文件
if [ ! -f $1 ];then
echo "the $1 is not a file"
exit
fi
待刪除文件路徑的文本
filename=$1
echo "filename: $filename" >> info.txt
計算待刪除的文件數量(總行數)
NUM=sed -n '$=' $filename
echo "picture delete num: $NUM"
逐行讀取文件內容並刪除對應路徑的文件
success=0
for i in cat $filename
do
成功信息重定向輸出到info.txt
echo "delete success: $i" >> info.txt
rm -rf $i
success=expr $success + 1
done
echo "success delete num: $success"
執行./deleteFile.sh ./pictureWIn.txt命令后,權限不夠,使用chmod命令對shell腳本賦予權限
看到打印的語句,命令已經執行,但是最后圖片缺沒有全部刪除,只刪除了最后一張c.jpg
修改pictureWIn.txt文件內容,發現只有放在最后一行的數據能被刪除成功,前面的數據都刪除失敗
:<<!
echo "./picture/a.jpg"
rm -rf ./picture/a.jpg
echo "./picture/b.jpg"
rm -rf ./picture/b.jpg
echo "./picture/c.jpg"
rm -rf ./picture/c.jpg
!
直接執行三條刪除語句,又是可以成功刪除三張圖片。
----------------------------Test----------------------------------
for循環讀取文件內容並保存到picture數組
n=1
for i in cat $filename
do
picture[$n]=$i
echo "picture[$n]: $i"
rm -rf $picture[$n]
n=expr $n + 1
done
while循環讀取文件內容並保存到delete數組
i=1
while read line
do
delete[$i]="$line"
i=expr $i + 1
done < $filename
遍歷數組並刪除文件
for i in ${picture[*]}
for i in seq $NUM
for ((i=NUM;i>=1;i--))
do
echo "delete success: ${picture[$i]}"
rm -rf ${picture[$i]}
done
嘗試將文本內容讀取后存放在數組,然后再刪除,結果還是一樣。
偶然間發現存放刪除文件路徑的文本是在windows下創建的,在linux下新建picture.txt文件,執行./deleteFile.sh ./picture.txt命令后,成功刪除。
在Linux下和Windows下新建一個文本文件,注意只是新建,並不向文件中寫入數據,此時兩個文件是一樣的。此時的文件(不管是何處新建的)放在Windows下和Linux下都是一樣的。
但是一旦修改則不一樣。在Linux下修改並保存,則換行是 \n ,在Windows下修改並保存,則換行是 \r \n 。
並且,一旦修改並保存,則該文件的換行是 \n 還是 \r \n 都是不會變了,除非人為的修改,只是修改保存其中的內容,換行的內容是不會變的。例如:換行是 \n 的文件放在Windows下增加一個換行(使用的編輯工具是Nodepad++),Windows下增加的換行還是 \n ;換行是 \r \n 的文件放在Linux下增加一個換行(使用的工具是vim),Linux下增加的換行還是 \r \n 。