寫一個關於復制文件的Shell腳本,腳本的功能:
①把一個目錄下(目錄A)的文件復制到另外一個目錄中(目錄B);
②如果目錄B不存在,就創建出這個目錄;
③可以重命名復制后得到的文件;
其實,這個腳本並沒有什么用,只是為了檢驗最近學習的Shell語法是否掌握了而已。源碼如下:
PATH0=$1 FILE0=$2 PATH1=$3 FILE1=$4 if [ ! -d $PATH0 ] ; then echo "The path is not exist!" exit 0 else echo "The path is exist!" fi if [ ! -f "$PATH0$FILE0" ] ; then echo "Can't find $FILE0 this file!" exit 0 else echo "the file is exist!" fi if [ ! -d $PATH1 ] ; then echo "The path is not exist,and creat it now!" mkdir $PATH1 cp -i $PATH0$FILE0 $PATH1$FILE1 else if [ ! -n "$FILE1" ] ; then #$FILE這個變量必須加""號,否則會出錯,不能正確判斷 echo "$PATH1 is exist,but FILE1 is empty!" cp $PATH0$FILE0 $PATH1 else echo "$PATH1 is exist !" cp -i $PATH0$FILE0 $PATH1FILE1 fi fi exit 0
修改這個腳本的權限:
yang@yang-VirtualBox:~/test$ sudo chmod 777 auto_cp.sh
執行這個腳本的方法:
yang@yang-VirtualBox:~/test$ ./auto_cp.sh 目錄A 文件A 目錄B 文件B
這個腳本中有四個參數,第一個參數是需要復制的文件所在的目錄,第二個參數是需要復制的目錄,第三個參數是要復制到的目標路徑,第四個參數復制完成后文件的名字
1.第一種情況,目錄B不存在,第四個參數為空:
這種情況下,會創建出一個新的目錄,路徑為第三個參數,然后把文件A原封不動地復制到這個新創建的目錄中。
2、第二種情況,目錄B不存在,文件B的名字跟文件A不同:
這種情況下,會根據參數3的路徑創建出一個目錄,把文件A復制到這個新創建的目錄中,並且重命名為第四個參數的名稱;
3、第三種情況,目錄B存在,第四個參數為空:
這種情況下,直接把文件A原封不動地復制到目錄B中
4.第四種情況,目錄A不存在:
報錯!
5、第五種情況,文件A不存在:
報錯!
最后,補充一些知識點:
實現代碼一
#shell判斷文件夾是否存在 #如果文件夾不存在,創建文件夾 if [ ! -d "/Top" ]; then mkdir -p /Topfi #shell判斷文件,目錄是否存在或者具有權限 folder="/Top" file="/Top/test.txt" # -x 參數判斷 $folder 是否存在並且是否具有可執行權限 if [ ! -x "$folder"]; then mkdir "$folder" fi # -d 參數判斷 $folder 是否存在 if [ ! -d "$folder"]; then mkdir "$folder" fi # -f 參數判斷 $file 是否存在 if [ ! -f "$file" ]; then touch "$file" fi
# -n 判斷一個"變量"是否有值 if [ ! -n "$file" ]; then echo "$file 變量為空!" exit 0 fi # 判斷兩個變量的字符串內容是否相同 if [ "$file1" = "$file2" ]; then echo "$file1 equal $file2" else echo "$file1 not equal $file2" fi
實現代碼二
#!/bin/sh # 說明:判斷文件是否存在 myPath="/Top" myFile="/Top/access.log" # 這里的-x 參數判斷$myPath是否存在並且是否具有可執行權限 if [ ! -x "$myPath"]; then mkdir "$myPath" fi # 這里的-d 參數判斷$myPath是否存在 if [ ! -d "$myPath"]; then mkdir "$myPath" fi # 這里的-f參數判斷$myFile是否存在 if [ ! -f "$myFile" ]; then touch "$myFile" fi
# 其他參數還有-n,-n是判斷一個變量是否是否有值 if [ ! -n "$myVar" ]; then echo "$myVar 變量為空!" exit 0 fi # 判斷$file字符串內容是否是“123123”相同 if [ "$file1" = "123123" ]; then echo "$file1 equal $file2" else echo "$file1 not equal $file2" fi
參考:https://www.cnblogs.com/weijiangbao/p/7862278.html