Мені потрібно створити текстовий файл (якщо він уже не існує) і написати новий рядок у файл, використовуючи bash.
Я впевнений, що все просто, але чи міг хтось пояснити мені це?
Відповіді:
Якщо ви хочете це зробити як сценарій, наступний сценарій Bash повинен робити те, що ви хочете (плюс повідомляти вам, коли файл уже існує):
#!/bin/bash
if [ -e $1 ]; then
echo "File $1 already exists!"
else
echo >> $1
fi
Якщо ви не хочете повідомлення "вже існує", ви можете використовувати:
#!/bin/bash
if [ ! -e $1 ]; then
echo >> $1
fi
Змінити про використання:
Збережіть будь-яку версію з назвою, яка вам подобається, скажімо, "create_file" (цитата моя, ви не хочете, щоб вони були в імені файлу). Потім, щоб зробити файл виконуваним, у командному рядку виконайте:
chmod u+x create_file
Помістіть файл у каталог у своєму шляху , а потім використовуйте його з:
create_file NAME_OF_NEW_FILE
$ 1 - це спеціальна змінна оболонки, яка приймає перший аргумент у командному рядку після назви програми; тобто $ 1 підбере NAME_OF_NEW_FILE у наведеному вище прикладі використання.
Створення текстового файлу в unix можна здійснити за допомогою текстового редактора (vim, emacs, gedit тощо). Але те, що ви хочете, може бути приблизно таким
echo "insert text here" > myfile.txt
Це помістить текст "вставити текст сюди" у файл myfile.txt. Щоб перевірити, чи це спрацювало, використовуйте команду 'cat'.
cat myfile.txt
Якщо ви хочете додати файл, використовуйте це
echo "append this text" >> myfile.txt
Припускаючи, що ви маєте на увазі команди оболонки UNIX, просто запустіть
echo >> file.txt
echoдрукує новий рядок, і >>обов'язок оболонки додає цей новий рядок до файлу, створюючи, якщо він ще не існує.
Однак для того, щоб правильно відповісти на запитання, мені потрібно було б знати, що ви хотіли б зробити, якщо файл уже існує. Наприклад, якщо ви хочете замінити його поточний вміст новим рядком, ви б використали
echo > file.txt
EDIT: і у відповідь на коментар Джастіна, якщо ви хочете додати новий рядок, лише якщо файл ще не існував, ви можете зробити
test -e file.txt || echo > file.txt
Принаймні, це працює в Bash, я не впевнений, чи працює це і в інших оболонках.
#!/bin/bash
file_location=/home/test/$1.json
if [ -e $policy ]; then
echo "File $1.json already exists!"
else
cat > $file_location <<EOF
{
"contact": {
"name": "xyz",
"phonenumber": "xxx-xxx-xxxx"
}
}
EOF
fi
Цей код перевіряє, чи вказаний файл JSON користувача присутній у тестовому домашньому каталозі чи ні. Якщо його немає, він створить його разом із вмістом. Ви можете змінити розташування та вміст файлу відповідно до своїх потреб.