Код, который у меня есть, должен попросить пользователя ввести имя каталога, который он хочет создать, затем он должен попросить отредактировать файлы в каталоге, однако, когда после создания каталога сценарий просто не продолжается, я Я не вижу никаких ошибок, но свежим взглядом всегда легче анализировать код.

Я также добавил файлы в каталог, но он никогда не спрашивает меня, хочу ли я их редактировать.

#!/bin/bash

#Testing to see if input is empty 
if [ $# -lt 1 ]; then
    echo "Empty Directory will be created"
fi

#Get the name of the directory by the user, also creating a variable named directory 
read -p "Please enter the name of the drectory you wish to create: " directory

#Check if the directory exists, if it doesn't it will be created in the Home folder
if [ ! -d ~/$directory ]; then
#Creating the directory if it doesnt exist
    mkdir ~/$directory/
fi

#Create files individually in the directory 
for i in "$@"; do
    touch ~/$directory/$i
#Asking the user if they wish to edit the files they have created inside the directory
    read -p "edit file $i (Y/N)? " edit
#If they answer yes then read the lines entered by the user

if [["$edit" = "Y" || "$edit" = "y"]]; then
    line=""

    #Stores the amount of words added to the file
    count=0

    #Reads the lines enetered by the user 
    echo "Please enter your text to be added into the file (Enter \"end\" to exit the editing):"
    read line

    #The script will keep reading the words entered in the file until the user initiates the end command "end"

        while ["$line" != "end"]; do
    
        #repeat the words entered into the file
        echo "$line" >> ~/directory/$i
    
        #Get the amount of words entered into the file
        count=$(($count + $(wc -w <<< $line)))
    
        #read the next line from user input
        read line 
        
    done
    echo "$count words have been written to the file"
    
fi
done

0
Blue Moon 1 Дек 2020 в 01:36
Вы должны убедиться, что пользователь находится в своем ~/directory при запуске скрипта. Если они запускают скрипт из любого другого места в системе ~/directory, то файлов там не будет.
 – 
Nasir Riley
1 Дек 2020 в 01:46
5
 – 
steeldriver
1 Дек 2020 в 01:46
1. Некоторые переменные не заключены в кавычки 2. ~ не рекомендуется использовать в скриптах 3. set -x почти всегда помогает
 – 
Artem S. Tashkinov
1 Дек 2020 в 02:29
Так что я должен быть в папке я создал каталог, а затем запустить скрипт?
 – 
Blue Moon
1 Дек 2020 в 02:46
Да. На самом деле, просто чтобы убедиться, что они должны быть в /home/user/directory, так как тильда может не расширяться в зависимости от среды.
 – 
Nasir Riley
1 Дек 2020 в 02:54

1 ответ

Лучший ответ

Измените эту строку

if [["$edit" = "Y" || "$edit" = "y"]]; then

С этой строкой:

if [[ "$edit" = "Y" || "$edit" = "y" ]]; then

Вам не хватает пробела после [[ и до ]].

Также: лучше использовать $HOME вместо ~

2
LincolnP 1 Дек 2020 в 03:06