Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Shell scripts (sh, bash, zsh, tcsh)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8

Открыть новую тему     Написать ответ в эту тему

alyent



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обратите, пожалуйста, внимание, что существует более активная на настоящий момент смежная ветка.

Там же можно ознакомится со списком примечательной литературы по теме.
Первый пост этой ветки имел вид...

Всего записей: 1087 | Зарегистр. 09-03-2002 | Отправлено: 10:04 02-02-2003 | Исправлено: ASE_DAG, 19:08 12-07-2013
Sea Eagle



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alyent
 
Примерно так:
 

Код:
 
#!/bin/sh
loop=0
while [ $# -ne 0 ] # Цикл выполняется до тех пор, пока остаются аргументы
do
 echo $1 #вывод параметра
 shift # следующий параметр
done
 

 
 
 
Добавлено
UncoNNecteD

Цитата:
Лучше подскажите хороший мануал для bash !

 
тебе именно мануал?
могу порекомендовать книжку:
Дэвид Тейнсли, Руководство разоработчика. Linux и UNIX: программирование в SHELL

Всего записей: 39 | Зарегистр. 04-06-2004 | Отправлено: 09:22 17-06-2004
alyent



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sea Eagle
спасибо
Только вот на последнем аргументе не останавливается, а пытается считать еще один и дает $(#+1) = "" .
 
Добавлено
Починил!

Код:
until [ -z "$2" ]; do
  echo $2
  shift
done

Забыл сказать что с $2 читаю
 
 
Добавлено
Как написать
Код:
if ((a==1) && (b>=3)) a = b;
с помощью BASH?

Всего записей: 1087 | Зарегистр. 09-03-2002 | Отправлено: 09:34 17-06-2004
Sea Eagle



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alyent
Не знаю, не знаю...
 
у меня нормально:

Код:
 
195$ ./test.sh wer ert rty
wer
ert
rty
 


Всего записей: 39 | Зарегистр. 04-06-2004 | Отправлено: 09:43 17-06-2004
alyent



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
у меня нормально:

Возможно моя криворукость... И все-таки несколько извращенный метод, согласитесь. String [] ARGV в Perl и Java куда правильнее на мой взгляд.

Всего записей: 1087 | Зарегистр. 09-03-2002 | Отправлено: 09:46 17-06-2004
Sea Eagle



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alyent

Цитата:
Как написать  

Код:
if ((a==1) && (b>=3)) a = b;  

с помощью BASH?

 
примерно так:

Код:
 
тестинг , сорри
 

 
 

Цитата:
Возможно моя криворукость... И все-таки несколько извращенный метод, согласитесь. String [] ARGV в Perl и Java куда правильнее на мой взгляд.

 
Согласен, но это ведь не полноценный язык а всего-лишь Шелл-скрипт...

Всего записей: 39 | Зарегистр. 04-06-2004 | Отправлено: 09:59 17-06-2004 | Исправлено: Sea Eagle, 10:11 17-06-2004
alyent



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sea Eagle
Спасибо за помощь. Просто я на шелл-скрипте не писал особо, а тут дали в универе задание - пришлось выучить. Синтаксис древний, но зато это хороший "клей", или "молоток" (русские с молотком и такой-то матерью могут поченить абсолютно все).

Всего записей: 1087 | Зарегистр. 09-03-2002 | Отправлено: 10:03 17-06-2004
Sea Eagle



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Там последний код малость не работает, вернее работает, но не правильно... ща я его до ума доведу!!!
 
Добавлено
Вот рабочий пример:

Код:
 
#!/bin/sh  
 
a=1
b=4
 
if [ "$a" -eq "1" -a "$b" -ge "3" ]; then
a=$b
echo "YES"
else
echo "NO"
fi
 


попробуй поменять значения a и b и потестить
 
 
 
Добавлено
ну и естественно в IF
оператор -a = &&
оператор -o = ||
оператор -eq - два числа равны
оператор -ne - два числа неравны
оператор -gt - первое > второго
оператор -lt - первое < второго
оператор -ge - первое >= второму
оператор -le - первое <= второму
 
Во!!!  
 

Всего записей: 39 | Зарегистр. 04-06-2004 | Отправлено: 10:15 17-06-2004 | Исправлено: Sea Eagle, 10:58 17-06-2004
f_serg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alyent
Еще вариант прохода по всем аргументам:

Код:
for i in $*
do
echo $i
done


----------
Serg

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 13:56 17-06-2004
Sea Eagle



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
f_serg
 
Да... и так тоже можно...

Всего записей: 39 | Зарегистр. 04-06-2004 | Отправлено: 16:17 17-06-2004
alyent



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поставил ZSH - шелл супер, гораздо удобнее bash (если кому интересно, могу перечислить почему).  
Но у меня почему-то не работают кнопки <DEL> <HOME> <END> (при нажатии печатается '~').
Помогите починить.  

Всего записей: 1087 | Зарегистр. 09-03-2002 | Отправлено: 20:31 01-07-2004 | Исправлено: alyent, 20:32 01-07-2004
Demetrio

uid=0
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
http://www-zeuthen.desy.de/computing/services/software/newlist/documentation/shells/zsh/zsh_14.html#SEC46
 
может тут чего полезного найдёшь.
 

Цитата:
если кому интересно, могу перечислить почему

интересно

Всего записей: 9967 | Зарегистр. 29-05-2002 | Отправлено: 21:49 01-07-2004
alyent



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хех, теперь можно передвигаться не только побуквенно, но и прыгать по словам.


Код:
 
bindkey '\e[3~' delete-char           # del  
bindkey '\e[1~' beginning-of-line     # home
bindkey '\e[4~' end-of-line           # end
 
bindkey '\C-[Oc'  forward-word        # C-right
bindkey '\C-[Od'  backward-word       # C-left
 



Цитата:
интересно


  • Автодополнение предлагает все варианты, а затем прокручивает по-порядку (как в VIM)
  • Проверка написания при наборе комманд
  • Шелл просто удобнее (надо пробовать)
  • Простота настройки
  • Больше фич (я еще далеко не все испробовал)

Всего записей: 1087 | Зарегистр. 09-03-2002 | Отправлено: 22:14 01-07-2004 | Исправлено: alyent, 22:32 01-07-2004
alyent



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пытаюсь сделать из zsh  почти полноценный текстровый редактор.  
Вот только проблемы с control+del  

Код:
bindkey '\C-[[3^'  delete-word

Слово-то удаляет, но печатает '^' символ. Как починить? Где ошибка?
 
Добавлено

Код:
 
bindkey '\e[1~' beginning-of-line               # home
bindkey '\e[2~' overwrite-mode          # Insert
bindkey '\e[3~' delete-char                     # del
bindkey '\e[4~' end-of-line                     # end
bindkey '\e[5~' up-line-or-history      # PageUp
bindkey '\e[6~' down-line-or-history    # PageDown
bindkey '\e[7~' beginning-of-line               # home rxvt
bindkey '\e[8~' end-of-line                     # end rxvt
bindkey '\C-[Oc'   forward-word                 # C-right
bindkey '\C-[Od'   backward-word                # C-left
bindkey '\C-\b'    backward-delete-word # C-backspace
bindkey '^Z'       undo                 # C-Z
bindkey '^Y'       redo                 # C-Y
 

 
может кому пригодится...

Всего записей: 1087 | Зарегистр. 09-03-2002 | Отправлено: 12:05 02-07-2004
Sea Eagle



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alyent
Хм... инетерстно... как и все новое....
Хотя я сам переходить на него наверное не буду, т.к. надобности нет, а все, что нужно пока могу сделать на bash'е или Perl'е... тем более, что они ставяться вместе с OS (FreeBSD)

Всего записей: 39 | Зарегистр. 04-06-2004 | Отправлено: 11:59 07-07-2004 | Исправлено: Sea Eagle, 13:37 07-07-2004
Infection

iB3 PostgreSQL Coder
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
(
sleep 1
echo "login\r\n"
sleep 1
echo "password\r\n"
sleep 1
echo "\r\n"
sleep 2
echo "send_command\r\n";
sleep 1
-------------------------------------
echo "\004"
echo "\r\n"
-------------------------------------
echo "exit;\r\n";
) | telnet 192.168.5.57 8000
 
 
как сделать так, чтобы на месте
-------------------------------------
echo "\004"
read echo "\r\n"
-------------------------------------
 
чтобы было следующее:
посылаем команду echo echo "\004" и ответ от команды засунуть в переменную, затем проверить на наличие подстроки в этой переменной и при ее отсутсвии завернуться в цикл и отрабатывать этот блок  
-------------------------------------
echo "\004"
echo "\r\n"
-------------------------------------
 
пока не найдется нужна строка в ответе от команды echo "\004" ?
естественно поставить sleep
 
 
Добавлено:
ща почитал, и вижу сумбур
 
вообщем в определенном месте надо получить ответ от telnet и засунуть в переменную
 
Добавлено:
или проще, все что исходит от STDOUT заносить в переменную, при чем только в определенном месте скрипта, а в остальное время в стандартный поток или /dev/null, не важно
 
вопрос как?

Всего записей: 352 | Зарегистр. 21-12-2001 | Отправлено: 18:16 02-04-2005
Iceman82



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может ли кто-нибудь объяснить, почему строка

Код:
 
NOW_DATE=`eval "date -R --date='$1 days ago'"`
 

работае нормально, в если записать

Код:
 
NOW_DATE=`date -R --date='$1 days ago'`
 

то получаем ошибку типа:

Код:
date: неверная дата `$1 days ago'

 
В принципе, меня и так устраивает, но просто хотелось бы понять, почему при использовании промежуточной строки и команды eval Bash понимает, что такое $1, а если выполнять подстановку команды напрямую, то нет.

Всего записей: 48 | Зарегистр. 10-02-2005 | Отправлено: 16:02 12-06-2006
sunduk4

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как в скрипт bash можно передать параметром строку, содержащую пробелы? Bash воспринимает ее как несколько параметров..

Всего записей: 177 | Зарегистр. 03-04-2004 | Отправлено: 08:06 20-11-2006
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Надо заключить параметр в кавычки когда запускаешь скрипт, впрочем это верно не только для скрипта но и для чего угодно, и не только для *nix но и для win

Код:
 
./program "long parameter"
 

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 18:48 20-11-2006 | Исправлено: FuzzyLogic, 18:49 20-11-2006
sunduk4

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FuzzyLogic
Про кавычки я знаю, заминка в том, что строка параметра собирается из разных мест и в скрипт передается переменной.
./program "$STRING_VAR"
как в данном случае поступить?

Всего записей: 177 | Зарегистр. 03-04-2004 | Отправлено: 06:58 22-11-2006
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Собирать параметры вместе с кавычками, вроде того
$STRING_VAR="\"$PARAM1\" \"PARAM2\" \"PARAM3\""
и туда его...

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 09:21 22-11-2006
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Shell scripts (sh, bash, zsh, tcsh)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru