bash-скрипт принимает аргумент командной строки (файл) и параметры (расширения) для файла cp >> >> .bak или .190318 - PullRequest
0 голосов
/ 20 марта 2019

Вот что у меня есть:

    #!/bin/bash
    #Create script that passes a command line argument of file
    # with options to create backup of the file
    # with either the .bak or .190318 extension

    #Create backup and timestamp ext
    backup=$".bak"
    timestamp=$".190318"
    #Create file var to hold passed arg
    file=$1

    #while loop to set arg -w options
    while [ -n "$1" ]
    do

        case "$1" in
            #Option for backup ext
            -a)  echo "Appending $file with $backup extension"
                 cp "$file"  "${file%.*}.bak" ;;
            #Option for timestamp ext
            -b)  echo "Timestamp appending $timestamp to file $1"
                 echo "$file" >> "$timestamp" ;;
            #Shift to end Options break to exit loop
            --)  shift
                 break ;;
         esac
     done     

Затем я передал ./test14a -a file1 в командную строку.

Мой вывод:

cp: invalid option -- .
Try `cp --help' for more information.
Appending -a with .bak extension
cp: invalid option -- .

Я пытался переписать это много раз, передав файл и добавив переменную $ backup или cp {$ 1} {newfile.bak}, затем добавил $ file для использования в опциях, так как эхо не возвращает $ file но -a (опция). Вот почему у меня есть различные методы в моем случае (варианты проб и ошибок для теста). После всего этого я должен увидеть, был ли он успешным с помощью оператора echo (возможно, оператора if). Если бы вы могли указать мне направление, так как я думаю, что я причиняю больше вреда, чем пользы, переосмысливая его. Заранее спасибо!

Вот мой новый код:

#!/bin/bash
#Create script that passes a command line argument and options
#that creates a backup of a file with .bak or .190318 extensions
#Test for Success of the file created

#Create backup and timestamp ext
backup=$".bak"
timestamp=$".190318"
file=$2

#while loop to set arg -w options
while [ -n $1 ]
do

    case "$1" in
        #Option for backup ext
        -a)  echo "Appending $2 with $backup extension"
             cp  "$file"{,.bak}
             shift

             #Check for file success
             if [ -d==$file.bak ]
             then
                 echo "Success in making backup"
             else
                 echo "Your option failed"
             fi
             break ;;

        #Option for timestamp ext
        -b)  echo "Timestamp appending $timestamp to file $2"
             cp "$file"{,.$(date +"%y%m%d")}
             echo "$date" #Checking date output

             #Check for file success
             if  [ -d==$file.190318 ]
             then
                echo "Success in making timestamp file"
             else

                echo "Your option failed"
             #End if statement
             fi

             shift
             break ;;
         #Extra case to throw errors
         *)  echo "Unknown Option, Error"
             break ;;
    #End case statement
    esac
    shift
#End While loop
done

Все работает, но довольно уродливо. У кого-нибудь есть предложения, как это немного почистить? Может быть, способ сделать заявления if в другой вариант? И спасибо за идею отладки, поскольку она, очевидно, помогла мне увидеть, где я терпел неудачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...