запустить баш скрипт внутри скрипта , bash считать число из файла , сложить 2 переменные sh 

Скрипт  считывает число из файла , увеличивает переменную на 1 и записывает значение файл

то что нужно :

#!/bin/sh

nums=`cat file.txt`

echo "nutm=$nums"
echo "test17"

let "nums=1+$nums"
echo "numsv=$nums"
echo $nums>file.txt

теория ниже

bash  sh— усовершенствованная и модернизированная вариация командной оболочки Bourne shell. Одна из наиболее популярных современных разновидностей командной оболочки UNIX. Особенно популярна в среде GNU/Linux, где она часто используется в качестве командной оболочки по умолчанию. У bash`a ,как и у многих других шеллов ,есть возможность воспроизведения сценариев. Мы пишем в текстовом файле последовательность операторов, условий, циклов, скармливаем это башу. И он это воспроизводит. Т.е. это скрипт. Сейчас я расскажу о самых основах баша. Без которых не возможно написать программу.
Первое что надо знать — объявление переменных. Переменные объявляются по схеме типа:
имяпеременной=значение.
Сразу предупреждаю что при объявлении переменных пробелов быть не должно. Иначе вы получите сообщение : «bash: имяпеременной: команда не найдена
». Напишем простую программу выводящую значение переменной. Пишем:

Цитата:
a=5
echo $a

Сохраняем это как program.sh, и запускаем.
sh /путь_до_скрипта/program.sh
Вывелась пятерка.
Знак доллара ($) перед названием переменной, дает указание на то-что a — переменная. И что надо вывести её значение. Если написать:

Цитата:
a=5
echo a

Тогда выведется «a».
Попробуем написать программу для сложения 2 чисел:

Цитата:
a=5
b=2
echo $a+$b

Что вывелось? Вывелось 5+2, а все потому-что знак «+», интерпретировался как строка. И у нас получилась просто конкатенация! Так как же посчитать?

Цитата:
echo $a+$b|bc

Что такое «|bc» ? Bc — это basic calculator. Часто используется как калькулятор в UNIX-подобных системах. То есть строку «5+2» мы отправили на обработку калькулятору bc, и вывели то-что вернул нам калькулятор. То бишь результат сложения 2 чисел. Теперь немного о работе с файлами. Чтобы записать в файл, достаточно просто переадресовать поток с /dev/stdout в файл. Например:

Цитата:
echo Привет.>>/home/user/hello.world

Этот код создаст в домашней папке пользователя файл «hello.world», и напишет в нем «Привет».
Для чтения из файла можно использовать стандартные cat и tac. Например, для записи содержимого файла в переменную, надо использовать конструкцию типа:

Цитата:
a=`cat файл`

Команда cat с параметром файл, заключена в обратные кавычки, это значит что в переменную a — запишется значение ,которое вернула функция a. Для того чтобы прочитать из файла определенную строку, уже будут использоваться дополнительные функции. Например:grep,awk,tr.

Цитата:
a=`cat file|grep anybody|tr -d anybody`

Подробнее с этими функциями познакомимся позднее.
Сейчас напишем программу для решения проблемы ,с которой я столкнулся ранее. А заключалась она в следующем. Я установил на ноутбук Mandriva Linux. И поставил туда IceWm, все бы ничего, однако индикатора батареи там не было. Искать сторонний софт не хотелось, поэтому надо написать свой . Хоть он и получился не особо привлекательным, однако рабочий.
Что я знаю о батареях? То что статистика хранится в каталоге /proc/acpi/battery/BAT0/ (так было именно на моём ноуте, за остальные не отвечаю )) в файлах state и info. Информация хранится в файлах конструкцией типа:

Цитата:
описание значение
описание2 значение2

А вот и исходный код:

Цитата:
#!/bin/bash
function main{
while true;do
clear
COUNTER=`cat /proc/acpi/battery/BAT0/state|grep 'remaining capacity'|tr -d "remaing cpty:Ah"`
TOTAL=`cat /proc/acpi/battery/BAT0/info|grep 'last full capacity'|tr -d "lastfucpiymAh: "`
echo Зарядка: `echo $COUNTER/$TOTAL*100|bc -l`%
cat /proc/acpi/battery/BAT0/state|grep 'present rate'
cat /proc/acpi/battery/BAT0/state|grep 'remaining capacity'
cat /proc/acpi/battery/BAT0/state|grep 'present voltage'
cat /proc/acpi/battery/BAT0/info|grep 'design capacity'
cat /proc/acpi/battery/BAT0/info|grep 'design voltage'
cat /proc/acpi/battery/BAT0/info|grep 'last full capacity'
sleep 5s
done
}
main

Единственное что может вызвать у вас затруднение в этом коде — функции grep и tr. +цикл while.
Вначале начнем с цикла. У меня создается бесконечный цикл, в конце которого мы просто делаем sleep 5s (частота обновления индикатора). Done — соответственно конец цикла. Теперь разберемся со значением переменной counter.
cat /proc/acpi/battery/BAT0/state — возвращает содержимое всего файла, куда нам столько? Берем только одну строку с описанием «remaining capacity». Теперь у нас есть строка типа:

Цитата:
описание значение

А нам надо только значение, поэтому командой tr -d мы вырезаем не нужные символы, а это буквы — пробелы и прочее кроме цифр.
Если все это объединить — то получится.

Цитата:
cat /proc/acpi/battery/BAT0/state|grep 'remaining capacity'|tr -d "remaing cpty:Ah"

Теперь убираем у этого файла расширение, закидываем в /usr/bin. Теперь когда введем в консоли название скрипта, запустится наш индикатор.
Конечная форма индикатора вот:
.
Прошу прощения за скрин в гноме. IceWm я уже давно сломал 
Этот же самый индикатор можно таким-же образом написать на C++, python и других язык программирования.
Вот исходник на питоне, с тупой подстановкой регекспов 
Python script:

Цитата:
import time
import re
while true:
<tab>file = open(«/proc/acpi/battery/BAT0/state», «r»)
<tab>file2 = open(«/proc/acpi/battery/BAT0/info», «r»)
<tab>source_counter=file.read()
<tab>source_total=file2.read()
<tab>counter = re.findall(«([remaining capacity\d]{1,20})»
<tab>total = findall(«([last full capacity\d]{1,20})»
<tab>counter = re.findall(«([\d])»,counter[0])
<tab>total = re.findall(«([\d])»,total[0])
<tab>print(«Зарядка:»+str(counter[0]/total[0]);
<tab>file.close()
<tab>file2.close()
<tab>time.sleep(5)
#<tab> значит отступ табуляцией.

Существует большое количество средств, для решения проблем. На чем писать — решать вам.

http://forum.hackersoft.ru/showthread.php?t=8016

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

   
© 2012 Программирование в удовольствие Яндекс.Метрика Suffusion theme by Sayontan Sinha