2015-07-17 2 views
0

Я пишу базовый сценарий, который позволит мне назвать это, как это в терминале: newscript myscript "This is what my script is about"Bash скрипт для создания шаблона для новых сценариев

Так что этот сценарий принимает 2 аргумента, первый это имя из новый скрипт, второй - описание.

И цель этого сценария заключается в создание какого-то шаблон для новых сценариев с комментировали стандартное Infos в верхней части файла, например так:

#!/bin/bash 
#: Title  : $title 
#: Date  : `date +%m-%d-%Y` 
#: Author  : $user 
#: Version  : 1.0 
#: Description : $description 

Так это то, что я получил так далеко, но это дает мне syntax error: unexpected end of file, когда я пытаюсь запустить его:

#!/bin/bash 

#### EDITABLES #### 
user="user"  # 
dest="~/bin"  # 
## END EDITABLES ## 

title="$1" 
desc="$2" 
date=`date +%m-%d-%Y` 

## Checks if a file with the same name already exists and returns the exit status (0=true, non-0=false) 
fileExists() { [ -f "${1}/${2}" ] || $? } 

## If file does not exist, create and populate it, otherwise exit script 
if [ ! fileExists ${dest} ${title} ]; then 
    printf "%b-13 %b\n" "#!/bin/bash" "" "#: Title" ":${title}" "#: Date" ":${date}" "#: Author" ": ${user}" "#: Version" ": 1.0" "#: Description" ": ${desc}" >> ${dest}/${title} 
    chmod +x ${dest}/${title} 
    vi ${dest}/${title} 
else 
    echo "The name chosen for your new script is already used. Please choose another name." 
    exit 
fi 

unset fileExists 

Если у вас есть какие-либо предложения о том, как это исправить, пожалуйста, дайте мне знать.

+0

запустить свой код через http://shellcheck.net он будет ловить много общих ошибок и быть весьма полезным. –

ответ

3

Проблемы здесь:

fileExists() { [ -f "${1}/${2}" ] || $? } 

Список команд в {фигурных скобок} должен заканчиваться символом новой строки или точка с запятой (documentation). Вам нужно

fileExists() { [ -f "${1}/${2}" ]; } 

if синтаксис при вызове команды или функции является:

if ! fileExists ${dest} ${title}; then 

без скобок.

+0

Спасибо, что исправил проблему. Но теперь, похоже, что часть '> $ {dest}/$ {title}' не работает, как будто скрипт не смог записать файл, который еще не существует: 'строка 14: ~/bin/mynewscript: Нет такой файл или каталог'. Я уверен, что printf может писать файл, который не существует, не так ли? –

+0

Хорошо, все хорошо. Путь для переменной 'dest' должен быть абсолютным. –

+1

@JimiSpire, файл, который не существует, да, но * каталог * должен существовать. Кстати, какая команда ('printf' или иное) не имеет значения для перенаправления - перенаправления выполняются до запуска команды, поэтому будет выполняться перенаправление, которое работает или не работает для' printf', или а не буквально ничего другого. –

0

Так вот окончательный сценарий:

#!/bin/bash 
################################################  
#: Title    : newscript 
#: Creation date  : 07-17-2015 
#: Author   : Jean Michel Cote 
#: Github   : https://github.com/jeanmichelcote 
#: Version   : 1.0 
#: Description  : Use to create fresh new scripts with commented out general infos at the top. 
################################################ 
# 
#: $param1   : Script name 
#: $param2   : Script description 
# 
# EDITABLES #################### 
user="Name"     # 
github="repo.com"    # 
dest="$HOME/bin"    # Will automatically be created if non-existant 
# END EDITABLES ################ 

title=$1 
desc=$2 
date=`date +%m-%d-%Y` 
# Styles 
RED="\033[0;31m" 
WHITE="\033[1;37m"        
NC="\033[0m"      


## If destination directory does not exist, create it 
if [[ ! -d "${dest}" ]]; then 
    echo -e "Creating ${WHITE}${dest}${NC} directory..." && sleep 1.5 && mkdir ${dest} 
fi 

# If file does not exist, create and populate it, otherwise exit script with error message 
if [[ ! -f "${dest}/${title}" ]]; then 
    printf "%-20s %b\n" \ 
    "#!/bin/bash" "" \ 
    "################################################" "" \ 
    "#: Title" ": ${title}" \ 
    "#: Creation date" ": ${date}" \ 
    "#: Author" ": ${user}" \ 
    "#: Github" ": ${github}" \ 
    "#: Version" ": 1.0" \ 
    "#: Description" ": ${desc}" \ 
    "################################################" "" \ 
    "#" "" \ 
    "#: \$param1" ": -set param name-" \ 
    "#" "" \ 
    "# EDITABLES ######################" "" \ 
    "myVariable = \"myValue\"" "" \ 
    "# END EDITABLES ##################" "" > ${dest}/${title} 
    chmod +x ${dest}/${title} 
    $EDITOR ${dest}/${title} 
else 
    echo -e "${RED}The name chosen for your new script is already used.\nPlease choose another name." 
    exit 
fi 
Смежные вопросы