Bash: чтение и запись в файл

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Fat-Fat
Сообщения: 27

Bash: чтение и запись в файл

Сообщение Fat-Fat »

Не могу разобраться как работать с файлами в Bash.
Есть файл "file" в котором может находиться либо "0", либо "1". Какой должен быть код, который бы выполнял следующие действия:
- если "0", то увеличить переменную в которую было помещено значение из файла на 1 и записать ее в файл, при этом старое значение должно быть удалено;
- если "1", то присвоить перемонной1 переменную2.
При этом считанные данные из файла должны быть преобразованы в целые числа.

Помогите пожалуйста.
Спасибо сказали:
Аватара пользователя
Subj
Сообщения: 151
Статус: Useful
ОС: win

Re: Bash: чтение и запись в файл

Сообщение Subj »

a=`cat file`
if [ $a == "0" ];then
...
elsif [ $a == "1" ]; then
...
else
echo $a
fi

Чтото вроде этого
Building better software with Ada
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Bash: чтение и запись в файл

Сообщение sash-kan »

Fat-Fat писал(а):
04.12.2007 13:11
Есть файл "file" в котором может находиться либо "0", либо "1". Какой должен быть код
например:
(( $(cat <файл>) )) && echo 'в файле единица' || echo 'в файле ноль'
Fat-Fat писал(а):
04.12.2007 13:11
увеличить переменную в которую было помещено значение из файла на 1 и записать ее в файл
a=$cat(<файл>); (( a++ )); echo $a > <файл>
Fat-Fat писал(а):
04.12.2007 13:11
При этом считанные данные из файла должны быть преобразованы в целые числа.
гм. ну, например:
cat <файл> | sed 's/[.,].*//'
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Bash: чтение и запись в файл

Сообщение Rootlexx »

Код: Выделить всё

#!/bin/bash

file="./file.txt";
# Читаем один символ из файла и записываем в переменную var.
read -n 1 var < "$file";
# Если var==0, то увеличиваем прочитанное из файла $varfile значение на единицу и пишем в него же.
if [ $var -eq 0 ]; then
        varfile="./somefile.txt";
# Здесь есть тонкий момент: таким образом ($((<арифметическое выражение>))) можно работать только с целыми числами.
#        printf "%d\n" "$(( $(cat "$varfile")+1))" > "$varfile";
# Для работы с вещественными используйте bc.
        printf "%d\n" "$(echo "$(cat "$varfile")"+1.25 | bc -q)" > "$varfile";
fi
# Вообще возможен произвольный доступ к элементам файла.
# Связываем дескриптор 3 на ввод-вывод с файлом $varfile.
exec 3<> "$varfile";
# Читаем 5 символов из данного файла.
read -n 5 <&3;
# Читаем ещё и, если там 0, то после него записываем 1, старое значение теряется.
read -n 1 <&3;
# Если команде read не передаётся имя переменной, то последнее прочитанное значение сохраняется в $REPLY.
if [ $REPLY = "0" ]; then
        printf 1 >&3;
fi
# Закрываем созданный дескриптор.
exec 3>&-;
Спасибо сказали: