Учимся применять bash-скрипты

Искусство написания bash скриптов. Делимся своими наработками
Аватара пользователя
ZEN
Администратор
Сообщения: 1330
Зарегистрирован: 27 сен 2012, 18:23
Темы: 204
Откуда: Украина, Одесса
Статус: Не в сети

Учимся применять bash-скрипты

Сообщение ZEN » 24 окт 2012, 20:17

В данной теме со временем будет написан скрипт для загрузки песен с странички с музыкой. В виду разновидности сервисов, скрипт не универсальный, но уже можно назвать инструменты, которые скрипт будет использовать:
  • wget - для загрузки веб-страницы/файлов;
  • sed - удаления ненужного текста;
  • awk - выборка из текста, разбиение текста на части;
  • mid3iconv - преобразование кодировки mp3-тегов в читабельный формат;
Предлагаю уже сейчас выкладывать код, который хоть часть функциональности реализует. Со временем составим весь скрипт.
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

Аватара пользователя
lumberjack
Модератор
Сообщения: 1009
Зарегистрирован: 30 сен 2012, 04:04
Темы: 152
Откуда: Сургут
Статус: Не в сети

Re: Учимся применять bash-скрипты

Сообщение lumberjack » 24 окт 2012, 20:32

СпойлерПоказать
можно, кстати, на garage.fm поупражняться. там разрешено для публичного скачивания

Аватара пользователя
ZEN
Администратор
Сообщения: 1330
Зарегистрирован: 27 сен 2012, 18:23
Темы: 204
Откуда: Украина, Одесса
Статус: Не в сети

Re: Учимся применять bash-скрипты

Сообщение ZEN » 24 окт 2012, 22:12

Первым делом, попрактикуемся на странице Альбом месяца (Октябрь-2012). Следующий код скачает страницу и выдаст все ссылки на http://www.muzebra.com
/bin/bash писал(а):wget "http://linuxhub.ru/viewtopic.php?f=17&t=86" -O - -q | sed 's/data-url=/\ndata-url=/g;s/style/\nstyle/g' | grep data-url | awk -F'"' '{print $2}'
Результат писал(а):http://www.muzebra.com/l/cno8iu8gs8s/
http://muzebra.com/l/-63wg9xi9iq8/
http://www.muzebra.com/l/ftufkl827zq/
http://www.muzebra.com/l/ewtalpu41y8/
http://www.muzebra.com/l/653rg14u1zk/
http://www.muzebra.com/l/326sdf6s2zdc/
http://www.muzebra.com/l/22d664zcyiz/
http://www.muzebra.com/l/5jd3294copm/
http://www.muzebra.com/l/c3ogtxe0j/
http://www.muzebra.com/l/-1q6z7e4j3i1p/
http://www.muzebra.com/l/2nh8m2ycrhn/
http://www.muzebra.com/l/b77htz3q6io/
http://www.muzebra.com/l/5yxoem09958/
http://www.muzebra.com/l/1k2474es4jj/
http://www.muzebra.com/l/eyetw2702n/
http://www.muzebra.com/l/1h2s55bnmbus/
http://www.muzebra.com/l/-1oglsqml3cdr/
http://www.muzebra.com/l/10pv5f14yfio/
http://www.muzebra.com/l/c3eah3fgij/
http://www.muzebra.com/l/7bhskk3i0vye/
http://www.muzebra.com/l/om86tgxxvc4/
http://www.muzebra.com/l/3fb0jjy6mig/
http://www.muzebra.com/l/2n646w3031g/
http://www.muzebra.com/l/9nv1zwa9yek/
http://www.muzebra.com/l/-czfcjo9t8a/
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

Аватара пользователя
ZEN
Администратор
Сообщения: 1330
Зарегистрирован: 27 сен 2012, 18:23
Темы: 204
Откуда: Украина, Одесса
Статус: Не в сети

Re: Учимся применять bash-скрипты

Сообщение ZEN » 24 окт 2012, 23:48

Теперь как качать трек. Здесь есть особенность, сначала надо получить с сервера данные с хешем. Собственно, тут я заметил, что у меня в браузере через раз качает и в терминала через раз получает хеш, возможно сервер глючит? И так получаем хеш и записываем в переменную. Проверяем командой echo получили ли переменную
/bin/bash писал(а):zen@debian:~$ HASH=`wget --post-data="json" http://www.muzebra.com/service/user/playerparams/ -O - -q | awk -F'"' '{print $8}'`
zen@debian:~$ echo $HASH
7a8d8cd41a
Получили. А теперь посмотрим прошлый пост и возьмем к примеру ссылку
http://www.muzebra.com/l/cno8iu8gs8s/
а точнее нужна последняя её часть
cno8iu8gs8s
Её и хеш надо подставить в другую ссылку для загрузки. Ниже я скачаю трек в файл output.mp3 и командой mutagen-inspect посмотрю информацию о треке
/bin/bash писал(а):zen@debian:~$ wget http://savestreaming.com/t/cno8iu8gs8s_$HASH/ -O output.mp3
--2012-10-24 23:46:27-- http://savestreaming.com/t/cno8iu8gs8s_7a8d8cd41a/
Распознаётся savestreaming.com (savestreaming.com)... 95.211.186.205
Подключение к savestreaming.com (savestreaming.com)|95.211.186.205|:80... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа... 200 OK
Длина: 8980633 (8,6M) [audio/mpeg]
Сохранение в каталог: ««output.mp3»».

100%[=========================================================================================================>] 8 980 633 4,50M/s за 1,9s

2012-10-24 23:46:29 (4,50 MB/s) - «output.mp3» saved [8980633/8980633]

zen@debian:~$ mutagen-inspect output.mp3
-- output.mp3
- MPEG 1 layer 3, 160000 bps, 44100 Hz, 449.03 seconds (audio/mp3)
TDRC=1983
TIT2=Blue Monday
TRCK=5
TPE1=New Order
TALB=Power, Corruption And Lies
TCON=Synthpop

zen@debian:~$
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

Аватара пользователя
ZEN
Администратор
Сообщения: 1330
Зарегистрирован: 27 сен 2012, 18:23
Темы: 204
Откуда: Украина, Одесса
Статус: Не в сети

Re: Учимся применять bash-скрипты

Сообщение ZEN » 25 окт 2012, 00:11

Так... что же у нас имеется:
  • Возможность получить с страницы форума все ссылки треков с сайта www.muzebra.com
  • Возможность получать хеш - как я понял, хеш меняется не так часто, так что нет нужды перед загрузкой каждого трека получать его по новой.
  • Возможность качать трек - получая список ссылок, последние значение которых id трека, мы можем привязываясь к хешу качать эти треки с файлохранилища muzebra.com - http://savestreaming.com
Теперь надо подумать как получить имя трека, что бы не сохранять в абстрактный output.mp3. Сделать проверку, что переменная HASH не пустая. А так же по окончании закачки натравить на каждый файл команду mid3iconv для исправления кодировки тегов (преобразования кодировки из виндовой cp1251 в юникод)
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

Аватара пользователя
ZEN
Администратор
Сообщения: 1330
Зарегистрирован: 27 сен 2012, 18:23
Темы: 204
Откуда: Украина, Одесса
Статус: Не в сети

Re: Учимся применять bash-скрипты

Сообщение ZEN » 25 окт 2012, 08:40

Первые наброски bash-скрипта. Скрипт получает в качестве параметров ссылку на страницу с плеером и каталог, куда выкачать треки. Всё это с функциями и комментариями. Так же сделано много всяких проверок и всё это для того, что бы получить хеш :)
СпойлерПоказать
/bin/bash писал(а):zen@debian:~/Desktop$ cat muzebra.sh
#!/bin/bash

# Функция для проверки существует ли каталог
function direxist {
if [[ -d $1 ]] # Для подробностей смотрим man test
then
return
0; # true - каталог существует
else
return
1; # false - каталог отсутствует
fi
}

# Функция получения хеша
function gethash {
# Замечены проблемы с получением хеша от сервера
# По-этому добавляем 3 попытки на получение
for i in {1..3} # Цикл от 0 до 3
do
# Получаем хеш и записываем в переменную TMP
TMP=`wget \
--post-data="json" \
http://www.muzebra.com/service/user/playerparams/ -O - -q \
| awk -F'"' '{print $8}'`;
# Если переменная не пустая
if [[ -n $TMP ]]
then
# Прерываем цикл
break;
fi
done

# Возвращаем хеш
echo $TMP;
}

# Первый парметр скрипта ссылка на страницу с флеш-плеерами
TARGET_URL=$1;
# Второй параметр каталог, куда качать mp3 файлы
TARGET_DIR=$2;

# Проверяем существует ли каталог
if ( ! $(direxist $TARGET_DIR) ) # Если каталог не существует
then
# Информируем
echo "Каталог не существует";
# Завершаем работу программы
exit -1;
else # Иначе
# Информируем куда будем качать
echo "Каталог назначения: " "$TARGET_DIR";
fi

# Получаем хеш
HASH=$(gethash)
# Проверяем получили ли хеш
if [[ -z $HASH ]] # если переменная $HASH пустая
then
# Информируем
echo "Не удалось получить хеш. Может перезапуск поможет?"
exit -1
fi

echo $HASH

exit 0;zen@debian:~/Desktop$ cat muzebra.sh
#!/bin/bash

# Функция для проверки существует ли каталог
function direxist {
if [[ -d $1 ]] # Для подробностей смотрим man test
then
return
0; # true - каталог существует
else
return
1; # false - каталог отсутствует
fi
}

# Функция получения хеша
function gethash {
# Замечены проблемы с получением хеша от сервера
# По-этому добавляем 3 попытки на получение
for i in {1..3} # Цикл от 0 до 3
do
# Получаем хеш и записываем в переменную TMP
TMP=`wget \
--post-data="json" \
http://www.muzebra.com/service/user/playerparams/ -O - -q \
| awk -F'"' '{print $8}'`;
# Если переменная не пустая
if [[ -n $TMP ]]
then
# Прерываем цикл
break;
fi
done

# Возвращаем хеш
echo $TMP;
}

# Первый парметр скрипта ссылка на страницу с флеш-плеерами
TARGET_URL=$1;
# Второй параметр каталог, куда качать mp3 файлы
TARGET_DIR=$2;

# Проверяем существует ли каталог
if ( ! $(direxist $TARGET_DIR) ) # Если каталог не существует
then
# Информируем
echo "Каталог не существует";
# Завершаем работу программы
exit -1;
else # Иначе
# Информируем куда будем качать
echo "Каталог назначения: " "$TARGET_DIR";
fi

# Получаем хеш
HASH=$(gethash)
# Проверяем получили ли хеш
if [[ -z $HASH ]] # если переменная $HASH пустая
then
# Информируем
echo "Не удалось получить хеш. Может перезапуск поможет?"
exit -1
fi

echo $HASH

exit 0;
zen@debian:~/Desktop$ ./muzebra.sh "http://linuxhub.ru/viewtopic.php?f=17&t=86" .
Каталог назначения: .
48fea5f63e
zen@debian:~/Desktop$
Дальше интересней ;)
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

Аватара пользователя
ZEN
Администратор
Сообщения: 1330
Зарегистрирован: 27 сен 2012, 18:23
Темы: 204
Откуда: Украина, Одесса
Статус: Не в сети

Re: Учимся применять bash-скрипты

Сообщение ZEN » 25 окт 2012, 10:26

Первый черновик готов. Скачать можно командой
wget http://linuxhub.ru/download/muzebra.sh -q

Код с нормальным форматированием можно просмотреть на pastebin.com, либо без оного в спойлере ниже
СпойлерПоказать
/bin/bash писал(а):#!/bin/bash


###################################################
################# Блок функций ####################
###################################################
# Функция для проверки существует ли каталог
function direxist {
if [[ -d $1 ]] # Для подробностей смотрим man test
then
return
0; # true - каталог существует
else
return
1; # false - каталог отсутствует
fi
}

# Функция получения хеша
function gethash {
# Замечены проблемы с получением хеша от сервера
# По-этому добавляем 3 попытки на получение
for i in {1..3} # Цикл от 0 до 3
do
# Получаем хеш и записываем в переменную TMP
TMP=`wget $OPT\
--post-data="json" \
http://www.muzebra.com/service/user/playerparams/ -O - \
| awk -F'"' '{print $8}'`;
# Если переменная не пустая
if [[ -n $TMP ]]
then
# Прерываем цикл
break;
fi
done

# Возвращаем хеш
echo $TMP;
}

# Функция получения списка ссылок на треки muzebra
function gettracks {
track_list=`wget $OPT $1 -O - -q \
| sed 's/data-url=/\ndata-url=/g;s/style/\nstyle/g' \
| grep data-url \
| awk -F'"' '{print $2}'`
echo $track_list
}

# Функция получения имени трека по его ID на muzebra
function getname {
name=`wget $OPT http://muzebra.com/l/$1 -O - \
| grep 'h1 class="title"' \
| sed -e :a -e 's/<[^>]*>//g;/</N;//ba' `
echo $name;
}

# Функция для загрузки файла
function savetrack {
# ID трека
ID=$1;
# Имя трека вместе с расширением файла
FILE_NAME="$2.mp3";
# Загрузка файла
wget $OPT http://savestreaming.com/t/$ID"_"$HASH/ -O "$TARGET_DIR/$FILE_NAME";
}
###################################################

###################################################
############ Инициализация переменных ############
###################################################
# Дополнительные параметры для wget
OPT="--tries=0 --timeout=10 -q"
# Первый парметр скрипта ссылка на страницу с флеш-плеерами
TARGET_URL=$1;
# Второй параметр каталог, куда качать mp3 файлы
TARGET_DIR=$2;
###################################################

###################################################
############# Основной цикл программы #############
###################################################
# Проверяем существует ли каталог
if ( ! $(direxist "$TARGET_DIR") ) # Если каталог не существует
then
# Информируем
echo "Каталог не существует";
# Завершаем работу программы
exit -1;
elif ( ! cd "$TARGET_DIR" 2> /dev/null ) # Проверяем есть ли доступ в каталог
then # Если нету доступа
# Информируем
echo "Нет доступа к каталогу";
# Завершаем работу программы
exit -1;
fi


# Получаем хеш
HASH=$(gethash)
# Проверяем получили ли хеш
if [[ -z $HASH ]] # если переменная $HASH пустая
then
# Информируем
echo "Не удалось получить хеш. Может перезапуск поможет?"
exit -1
fi

# Получаем список ссылок
TRACK_LIST=$(gettracks $TARGET_URL)
# Если список пустой
if [[ -z $TRACK_LIST ]]
then
# Информируем
echo "Не удалось получить список ссылок на треки"
# Завершаем работу программы
exit -1;
else # Иначе
# Создаем переменную, которая будет считать кол-во загруженных файлов
count=0;
# Пробегаем в цикле по ссылкам
for i in $TRACK_LIST
do
# Вытаскиваем из ссылки ID трека
id=`echo "$i" | awk -F'/l/' '{print $2}' | sed 's|/||g'`;
# Получаем по ID имя трека (Исполнитель - Название Песни)
name=$(getname $id);
# Информируем
echo "Загружается файл: $name"
# И загружаем файл
savetrack $id "$name";
# Увеличиваем счетчик
count=$(($count+1));
done
# Информируем сколько файлов скачали
echo "Количество загруженных файлов: $count"
fi

exit 0;
###################################################
Как это работает:
СпойлерПоказать
zen@debian:~/Desktop$ ./muzebra.sh "http://linuxhub.ru/viewtopic.php?f=17&t=86" ./music/
Загружается файл: New order - Blue monday (1982)
Загружается файл: Сказки Чёрного Города - Тени (Том I. Хранители снов)
Загружается файл: Сектор газа - Русский мат
Загружается файл: Joy Division - Love Will Tear Us Apart
Загружается файл: Dido - White Flag
Загружается файл: Black Sabbath - Paranoid
Загружается файл: U2 - Elevation
Загружается файл: Black Sabbath - Iron Man
Загружается файл: Suzanne Vega - Tom's Diner
Загружается файл: Rammstein - Moskau
Загружается файл: Judas Priest - Breaking The Law
Загружается файл: Spiritual Front - Jesus Died In Las Vegas
Загружается файл: Ария - Дьявольский зной
Загружается файл: E.S.T. - Нет, слышишь, нет
Загружается файл: Сектор Газа - попэц
Загружается файл: КняZz - 3. Мастер кукол
Загружается файл: NikaDim - 05.NikaDim - "Опять 25
Загружается файл: КняZz (Тайна кривых зеркал) - Корсар
Загружается файл: Dead Space - Twinkle Tiwnkle littel star
Загружается файл: Godsmack - Greed
Загружается файл: Newton Family - Marathon
Загружается файл: ClawFinger - Nothing Going On
Загружается файл: Muse - Uprising
Загружается файл: Sex Pistols - Submission
Загружается файл: Yerzmyey - 30 minut remix (org. TATU)
Количество загруженных файлов: 25
zen@debian:~/Desktop$ ls -1 music/
Black Sabbath - Iron Man.mp3
Black Sabbath - Paranoid.mp3
ClawFinger - Nothing Going On.mp3
Dead Space - Twinkle Tiwnkle littel star.mp3
Dido - White Flag.mp3
E.S.T. - Нет, слышишь, нет.mp3
Godsmack - Greed.mp3
Joy Division - Love Will Tear Us Apart.mp3
Judas Priest - Breaking The Law.mp3
Muse - Uprising.mp3
New order - Blue monday (1982).mp3
Newton Family - Marathon.mp3
NikaDim - 05.NikaDim - "Опять 25.mp3
Rammstein - Moskau.mp3
Sex Pistols - Submission.mp3
Spiritual Front - Jesus Died In Las Vegas.mp3
Suzanne Vega - Tom's Diner.mp3
U2 - Elevation.mp3
Yerzmyey - 30 minut remix (org. TATU).mp3
Ария - Дьявольский зной.mp3
КняZz - 3. Мастер кукол.mp3
КняZz (Тайна кривых зеркал) - Корсар.mp3
Сектор Газа - попэц.mp3
Сектор газа - Русский мат.mp3
Сказки Чёрного Города - Тени (Том I. Хранители снов).mp3
zen@debian:~/Desktop$
UPD Проверку на доступ к каталогу надо поменять. Она работает только на чтение, а не на запись.
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

Серый
Сообщения: 844
Зарегистрирован: 27 сен 2012, 19:20
Темы: 102
Статус: Не в сети

Re: Учимся применять bash-скрипты

Сообщение Серый » 25 окт 2012, 22:43

ZEN, у меня твой скрипт не работает(
СпойлерПоказать

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

seryi@seryi-laptop:~$ ls
arhiv  dl  doc  exp  images  music  video http://linuxhub.ru.txt
seryi@seryi-laptop:~$ less http://linuxhub.rua.txt
seryi@seryi-laptop:~$ sh http://linuxhub.ru.txt
: not foundang.org.ua.txt: 3: 
http://linuxhub.ru.txt: 8: function: not found
http://linuxhub.ru.txt: 22: Syntax error: word unexpected (expecting "do")
seryi@seryi-laptop:~$ ls -l http://linuxhub.ru.txt
-rw-r--r-- 1 seryi seryi 5193 2012-10-25 23:10 http://linuxhub.ru
seryi@seryi-laptop:~$ chmod +x http://linuxhub.ru
seryi@seryi-laptop:~$ ls -l http://linuxhub.ru
-rwxr-xr-x 1 seryi seryi 5193 2012-10-25 23:10http://linuxhub.ru
seryi@seryi-laptop:~$ sh http://linuxhub.ru
: not foundang.org.ua.txt: 3: 
http://linuxhub.ru.txt: 8: function: not found
http://linuxhub.ru.txt: 22: Syntax error: word unexpected (expecting "do")
seryi@seryi-laptop:~$ cat http://linuxhub.ru.txt
#!/bin/bash
### http://linuxhub.ru/posting.php?mode=reply&f=10&t=87

###################################################
################# Блок функций ####################
###################################################
# Функция для проверки существует ли каталог
function direxist {
    if [[ -d $1 ]] # Для подробностей смотрим man test
    then
	return 0; # true - каталог существует
    else
	return 1; # false - каталог отсутствует
    fi
}

# Функция получения хеша
function gethash {
    # Замечены проблемы с получением хеша от сервера
    # По-этому добавляем 3 попытки на получение
    for i in {1..3} # Цикл от 0 до 3
    do
	# Получаем хеш и записываем в переменную TMP
	TMP=`wget $OPT\
	--post-data="json" \
	http://www.muzebra.com/service/user/playerparams/ -O - \
	| awk -F'"' '{print $8}'`;
	# Если переменная не пустая
	if [[ -n $TMP ]]
	then
	    # Прерываем цикл
	    break;
	fi
    done
    # Возвращаем хеш
    echo $TMP;
}

# Функция получения списка ссылок на треки muzebra
function gettracks {
    track_list=`wget $OPT $1 -O - -q \
    | sed 's/data-url=/\ndata-url=/g;s/style/\nstyle/g' \
    | grep data-url \
    | awk -F'"' '{print $2}'`
    echo $track_list
}

# Функция получения имени трека по его ID на muzebra
function getname {
    name=`wget $OPT http://muzebra.com/l/$1  -O - \
    | grep 'h1 class="title"' \
    | sed -e :a -e 's/<[^>]*>//g;/</N;//ba' `
    echo $name;
}

# Функция для загрузки файла
function savetrack {
    # ID трека
    ID=$1;
    # Имя трека вместе с расширением файла
    FILE_NAME="$2.mp3";
    # Загрузка файла
    wget $OPT http://savestreaming.com/t/$ID"_"$HASH/ -O "$TARGET_DIR/$FILE_NAME";
}
###################################################

###################################################
############ Инициализация переменных  ############
###################################################
# Дополнительные параметры для wget
OPT="--tries=0 --timeout=10 -q"
# Первый парметр скрипта ссылка на страницу с флеш-плеерами
TARGET_URL=$1;
# Второй параметр каталог, куда качать mp3 файлы
TARGET_DIR=$2;
###################################################

###################################################
############# Основной цикл программы #############
###################################################
# Проверяем существует ли каталог
if ( ! $(direxist "$TARGET_DIR") ) # Если каталог не существует
then
    # Информируем
    echo "Каталог не существует";
    # Завершаем работу программы
    exit -1;
elif ( ! cd "$TARGET_DIR" 2> /dev/null ) # Проверяем есть ли доступ в каталог
then # Если нету доступа
    # Информируем
    echo "Нет доступа к каталогу"; 
    # Завершаем работу программы
    exit -1;
fi


# Получаем хеш
HASH=$(gethash)
# Проверяем получили ли хеш
if [[ -z $HASH ]] # если переменная $HASH пустая
then
    # Информируем
    echo "Не удалось получить хеш. Может перезапуск поможет?"
    exit -1
fi

# Получаем список ссылок
TRACK_LIST=$(gettracks $TARGET_URL)
# Если список пустой
if [[ -z $TRACK_LIST ]]
then
    # Информируем
    echo "Не удалось получить список ссылок на треки"
    # Завершаем работу программы
    exit -1;
else # Иначе
    # Создаем переменную, которая будет считать кол-во загруженных файлов
    count=0;
    # Пробегаем в цикле по ссылкам
    for i in $TRACK_LIST
    do
	# Вытаскиваем из ссылки ID трека
	id=`echo "$i" | awk -F'/l/' '{print $2}' | sed 's|/||g'`;
	# Получаем по ID имя трека (Исполнитель - Название Песни)
	name=$(getname $id);
	# Информируем
	echo "Загружается файл: $name"
	# И загружаем файл
	savetrack $id "$name";
	# Увеличиваем счетчик
	count=$(($count+1));
    done
    # Информируем сколько файлов скачали
    echo "Количество загруженных файлов: $count"
fi

exit 0;
###################################################seryi@seryi-laptop:~$

Серый
Сообщения: 844
Зарегистрирован: 27 сен 2012, 19:20
Темы: 102
Статус: Не в сети

Re: Учимся применять bash-скрипты

Сообщение Серый » 25 окт 2012, 22:45

Дополнение к первому сообщению

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

seryi@seryi-laptop:~$ wget http://linuxhub.ru/download/muzebra.sh -q
seryi@seryi-laptop:~$ ls
arhiv  dl  doc  exp  images  music  muzebra.sh  video  http://linuxhub.ru.txt
seryi@seryi-laptop:~$ sh muzebra.sh
muzebra.sh: 8: function: not found
muzebra.sh: 14: [[: not found
seryi@seryi-laptop:~$ 

Аватара пользователя
ZEN
Администратор
Сообщения: 1330
Зарегистрирован: 27 сен 2012, 18:23
Темы: 204
Откуда: Украина, Одесса
Статус: Не в сети

Re: Учимся применять bash-скрипты

Сообщение ZEN » 25 окт 2012, 22:48

Серый, попробуй запустить так
chmod +x muzebra.sh
./muzebra.sh "viewtopic.php?f=17&t=86" ./music/

Скорее всего, у тебя sh - ссылка на dash оболочку. Если запустить как выше, то будет использоваться указанная в файле оболочка, то есть - bash
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей