Вот что у меня есть:
#!/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 в другой вариант? И спасибо за идею отладки, поскольку она, очевидно, помогла мне увидеть, где я терпел неудачу.