Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: [HOWTO] Пишем bash скрипты  (Прочитано 221785 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн sakibo

  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #105 : 29 Декабря 2010, 08:31:00 »
Чето не запустился вообще терминал. Раньше запускался из скрипта, но файл не открывал.
Такой man-страницы у меня нету. И на Opennet заглянул- не нашел там.
У меня классический  gnome-terminal.

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #106 : 29 Декабря 2010, 09:00:27 »
Может это:
gnome-terminal --command "gnome-terminal ./script.sh"
Запускается терминал, в котором запускается терминал и выполняется скрипт.
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн Щурин Юрий Евгеньевич

  • Участник
  • *
  • Сообщений: 212
  • "Войны ещё никого не сделали великим .." - м. Йода
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #107 : 29 Декабря 2010, 15:29:14 »
Доброго дня всем!

Напомните как можно читать файл (думаю использовать cat) и использовать строки как параметры для простых консольных команд (вот с этим пока непонятки).

Есть текстовый файл следующего содержания:

Старое название файла №1
Новое название файла №1
Старое название файла №2
Новое название файла №2
.........................

Нужно написать скрипт который отработает и переименует кучу перечисленных файлов.
Заранее спасибо.

Пользователь решил продолжить мысль 29 Декабря 2010, 17:44:07:
Сделал что то такое:

#! /bin/sh

x=1
while [ $x -le 847 ]
do
  mv ".$(cat index.txt|head -$x|tail -1)" "$(cat index.txt|head -$((x+1))|tail -1)"
  x=$(( $x + 2 ))
done

Отработало как надо но чё то как-то монстроидально вышло, на мой взгляд ... знающие люди поправят.
Главное - задача решена.
Всех с наступающими праздниками ....
« Последнее редактирование: 29 Декабря 2010, 17:44:07 от Щурин Юрий Евгеньевич »

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #108 : 30 Декабря 2010, 02:13:24 »
x=1
while [ $x -le 847 ] -> for x in $(seq 1 2 `grep -c . index.txt`)
x=$(( $x + 2 ))
« Последнее редактирование: 02 Января 2011, 01:41:11 от victor00000 »
Wars ~.o

Оффлайн Hariec

  • Новичок
  • *
  • Сообщений: 30
  • Hariec
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #109 : 30 Декабря 2010, 21:43:16 »
Подскажите что прописать в bashrc чтобы он подгружал мою папку со скриптами? Т.е. добавить ему свою папку помимо /bin.
Linux Calculate 2.6.36-zen1 x86_64 AMD Athlon

Оффлайн Andx

  • Участник
  • *
  • Сообщений: 160
  • Привет, Земляне!
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #110 : 11 Января 2011, 16:16:44 »
Подскажите, есть текстовый файл, примерно такого содержания:
454534 8900
437543 5000
32455 5450
26775 340
657897 33000
тоесть каждая строка это число1 пробел число2

Нужно число1 и число2 каждой строки подставить както в скрипт, чтобы в итоге выдавался такой текст на экран:
Some text for число1 and some text for число2
С одним числом легко справиться:
cat /media/12gb/input.txt | while read I; do echo some text for $I; done >/media/12gb/output.txtа вот как быть с двумя числами, не знаю, помогите :)
Asus K73E (Core i3 2310M/8gb ram/500gb/Intel HD Graphics 3000/HD audio/WIFI & BT/Ubuntu 12.04 64bit)
Живём правильно только тогда, когда после нас остаются чистые вода, воздух и земля.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #111 : 11 Января 2011, 16:50:04 »
cat /media/12gb/input.txt | while read I; do echo some text for $I; done >/media/12gb/output.txt
#!/bin/sh
cat ./sample | sed  's/ /\n/g' \
| while read LINE1
do
   read LINE2
echo FIRST $LINE1 AND SECOND $LINE2
done
ЗЫ. Можно расщеплять внутри do, можно сделать одной строкой - это дело вкуса.
« Последнее редактирование: 11 Января 2011, 16:53:31 от alexander.pronin »

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #112 : 12 Января 2011, 00:12:00 »
#!/bin/bash
IFS=$'\n'

for i in `cat /media/12gb/input.txt`
do
number1=`echo "$i" | awk '{print $1}'`
number2=`echo "$i" | awk '{print $2}'`

echo "Some text for $number1 and some text for $number2"

done
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #113 : 12 Января 2011, 08:28:51 »
aliftin, у Вас красивее получилось.

Оффлайн Andx

  • Участник
  • *
  • Сообщений: 160
  • Привет, Земляне!
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #114 : 12 Января 2011, 09:18:05 »
alexander.pronin
aliftin

Спасибо!! Все работает, вот только я стормозил :-[ , надо было сразу всю конструкцию выложить, ато оно перестает работать при наличии SQL запроса почемуто:
#!/bin/bash
IFS=$'\n'

for i in `cat ./listskus.txt`
do
number1=`echo "$i" | awk '{print $1}'`
number2=`echo "$i" | awk '{print $2}'`

echo "update `jos_vm_product_price` set `product_price` = $number1 where `product_id` in (SELECT `product_id` FROM `jos_vm_product` WHERE `product_sku` = $number2)"

done
Asus K73E (Core i3 2310M/8gb ram/500gb/Intel HD Graphics 3000/HD audio/WIFI & BT/Ubuntu 12.04 64bit)
Живём правильно только тогда, когда после нас остаются чистые вода, воздух и земля.

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #115 : 12 Января 2011, 12:11:56 »
echo "update `jos_vm_product_price` set `product_price` = $number1 where `product_id` in (SELECT `product_id` FROM `jos_vm_product` WHERE `product_sku` = $number2)"Что это такое вообще? Запрос отдельно, а вывод информации отдельно должен быть. У вас какая то пурга.
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #116 : 12 Января 2011, 12:19:00 »
Строчку sql запроса надо сформировать в переменной (или файле), чтобы не разбираться с такими проблемами.

Оффлайн Andx

  • Участник
  • *
  • Сообщений: 160
  • Привет, Земляне!
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #117 : 12 Января 2011, 12:51:17 »
Что это такое вообще? Запрос отдельно, а вывод информации отдельно должен быть. У вас какая то пурга.
это запрос sql. Нужно чтобы число1 и число2 подставлялись в эту строку запроса, ну ни бум бум я в этом :)
« Последнее редактирование: 12 Января 2011, 12:53:00 от Andx »
Asus K73E (Core i3 2310M/8gb ram/500gb/Intel HD Graphics 3000/HD audio/WIFI & BT/Ubuntu 12.04 64bit)
Живём правильно только тогда, когда после нас остаются чистые вода, воздух и земля.

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #118 : 12 Января 2011, 17:14:06 »
В базах данных не силен, но покажите как эта команда будет выглядеть в консоли.
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн Andx

  • Участник
  • *
  • Сообщений: 160
  • Привет, Земляне!
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #119 : 12 Января 2011, 17:30:11 »
В базах данных не силен, но покажите как эта команда будет выглядеть в консоли.
вывод в консоли такой должен быть:
update `jos_vm_product_price` set `product_price` = $number2 where `product_id` in (SELECT `product_id` FROM `jos_vm_product` WHERE `product_sku` = $number1)где $number2 и $number1 это переменные для чисел из каждой строки input файла
Asus K73E (Core i3 2310M/8gb ram/500gb/Intel HD Graphics 3000/HD audio/WIFI & BT/Ubuntu 12.04 64bit)
Живём правильно только тогда, когда после нас остаются чистые вода, воздух и земля.

 

Страница сгенерирована за 0.066 секунд. Запросов: 22.