motofan logo
26 страниц V « < 6 7 8 9 10 > »         
> 

Написание скриптов #!/bin/sh for UNIX, Кто поможет?

VINRARUS
сообщение 17.6.2011, 17:56 Закрепленное сообщение!


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Ура! В теме появилася шапочка. watsup.gif
В даной теме помогаем друг другу в написании шелл скриптов, и дружно решаем проблемы связанные с ними smile.gif

Вот мои рукописные мануалы для совсем новичков:
Основы. Синтаксис, кавычки, переменные, условные операторы
Розширенная инфа о if

Подробный мануал с примерами по ВСЕМ функциям SH
Портативная версия еще одного мануала
Книги в формате Djvu

Примеры работы с текстом через sed и мануал PRO и мануал NUB
Примеры работы с текстом через awk и мануал
Обрезка текста внутри переменных - чорт ногу сломит =] О логике шаблонов.

Где быстро найти инфу?
Тут вводите в строчку поиска манов любую утилиту, например echo, и 95% вероятности что получите инфу по всем функциям и ключам
Вот инфа по НЕКОТОРЫМ утилитам, также можна пользоваться поиском

ПС

1. Не во всех UNIX\LINUX системах можно сразу в терминале вводить команды утилит.
Например в MOTOMAGX часто перед командой утилиты нужно вводить "busybox" (например busybox free) хотя это и решено на некоторых модах.
А в некоторых выкидышах типа Android они и вовсе отсутствуют как и сам busybox, но есть возможность добавить его самому.

2. Не всегда утилиты поддерживают то что написано в манах к ним, иногда функционал меняется от версии к версии.

3. Также нужно знать что код от bash иногда может не работать корректно на shell (sh), хотя и очень редко.
Это из за того что древним программистам делать было нечего, когда не было еще интернета, и они понапридумывали кучу модификаций.
Хорошо хоть код под чистый shell подойдет ко всем им, из за чего он считается эталоном. smile.gif
А не bash как считают юные линуксойды.
[close]


Сообщение отредактировал VINRARUS - 12.12.2020, 21:32
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Osta
сообщение 29.7.2011, 16:31


Freestyler
********

Группа: Легенды MotoFan.Ru
Сообщений: 10 329
Регистрация: 20.7.2004
Пользователь №: 8 235
Модель телефона: Moto
Прошивка: *#9999#


Настроение:
Все невыспавшиеся в следующей жизни будут котами



Рейтинг: 4362



можно сделать от первого слова sux до первого слова class="iq" без использования спецсимволов?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 29.7.2011, 19:15


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



нужно уникальное первое слово или сочетание символов. Чтобы не повтоарялося в коде больше нигде, ато указанное тобой слово повторяеться раз 40.
А если за ним будут ненужные слова, их можна отсеять потом.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
igoripp
сообщение 10.8.2011, 19:49


Самый дерзкий
******

Группа: Пользователи
Сообщений: 1 412
Регистрация: 27.3.2010
Из: Касимов, Муром
Пользователь №: 215 540
Модель телефона: sony ion
Прошивка: Разные

Рейтинг: 1335.5



Этот код для перевода десятичного числа в двоичное, восьмеричное и шестнадцатеричное. Помогите написать код для перевода bin, oct и hex в dec.
Код
#!/bin/sh
mypath=${0%/*}
cd $mypath
#########################################################Получаем значение десятичного числа#######################
d=$(showTextEntry "Введите число:" "" "")
#########################################################Если ввели 0, выводим сразу же ответ#######################
if [ $d -eq 0 ]
then
p="bin=0 oct=0 hex=0"

else
#########################################################Дублируем полученное число 4 раза#######################
m=$d
w=$d
t=$d
k=$d

#########################################################bin####################
###
>def.txt
until [ $d -eq 0 ]
do
e=$(( $d % 2 ))
echo $e>>def.txt
d=$(( $d / 2 ))
done

#########################################################oct####################
###
>mno.txt
until [ $m -eq 0 ]
do
e=$(( $m % 8 ))
echo $e>>mno.txt
m=$(( $m / 8 ))
done

#########################################################hex####################
###
>wxy.txt
until [ $w -eq 0 ]
do
e=$(( w % 16 ))

if [ $e -eq 0 ]
then
echo $e>>wxy.txt

elif [ $e -eq 1 ]
then
echo $e>>wxy.txt

elif [ $e -eq 2 ]
then
echo $e>>wxy.txt

elif [ $e -eq 3 ]
then
echo $e>>wxy.txt

elif [ $e -eq 4 ]
then
echo $e>>wxy.txt

elif [ $e -eq 5 ]
then
echo $e>>wxy.txt

elif [ $e -eq 6 ]
then
echo $e>>wxy.txt

elif [ $e -eq 7 ]
then
echo $e>>wxy.txt

elif [ $e -eq 8 ]
then
echo $e>>wxy.txt

elif [ $e -eq 9 ]
then
echo $e>>wxy.txt

elif [ $e -eq 10 ]
then
echo A>>wxy.txt

elif [ $e -eq 11 ]
then
echo B>>wxy.txt

elif [ $e -eq 12 ]
then
echo C>>wxy.txt

elif [ $e -eq 13 ]
then
echo D>>wxy.txt

elif [ $e -eq 14 ]
then
echo E>>wxy.txt

elif [ $e -eq 15 ]
then
echo F>>wxy.txt

fi
w=$(( $w / 16 ))
done
#########################################################Переворачиваем строки#######################
sed -n '1!G;h;$p' def.txt>fed.txt
sed -n '1!G;h;$p' mno.txt>onm.txt
sed -n '1!G;h;$p' wxy.txt>yxw.txt

#########################################################Делаем столбики строками#######################
busybox cat fed.txt | busybox tr -d "\n" > def.txt
busybox cat onm.txt | busybox tr -d "\n" > mno.txt
busybox cat yxw.txt | busybox tr -d "\n" > wxy.txt

#########################################################Помещаем в переменную значения файлов#######################
p=`cat def.txt`
echo bin: $p>igo.txt
p=`cat mno.txt`
echo oct: $p>>igo.txt
p=`cat wxy.txt`
echo hex: $p>>igo.txt
p=`cat igo.txt`
fi

#########################################################bin####################
###
rm .txt

showQ "Результат dec=$k" "$p" 2      

VINRARUS, Поздравляю с назначением)

Сообщение отредактировал igoripp - 10.8.2011, 19:50
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 11.8.2011, 7:26


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



спасиба smile.gif
Ну тут будет сложновато. Нада все действия в обратном порядке делать.
Например строчку опять столбиком будет тяжеловато сделать.
И комбинацию e=$(($d%2)) например я незнаю как обратить, ведь там, как я понял, с любого числа получаються 1 или 2 (тоесть процес не обратим).
К стати етот код точно правильно общитывает?




Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
IlluminatI
сообщение 11.8.2011, 7:59


Ветеран
*****

Группа: Пользователи
Сообщений: 670
Регистрация: 15.8.2009
Из: Украина, г.Харьков
Пользователь №: 204 570
Модель телефона: [DROID MAXX][RAZR M]


Настроение:
139



Рейтинг: 520



Цитата(igoripp @ Вчера, 22:49)
* Этот код для перевода десятичного числа в двоичное, восьмеричное и шестнадцатеричное. Помогите написать код для перевода bin, oct и hex в dec.

жесть... это всё безобразие надо в цикл сворачивать, причём сразу. При таком кол-ве одинаковых строк очень легко незаметить ошибку
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
igoripp
сообщение 11.8.2011, 8:03


Самый дерзкий
******

Группа: Пользователи
Сообщений: 1 412
Регистрация: 27.3.2010
Из: Касимов, Муром
Пользователь №: 215 540
Модель телефона: sony ion
Прошивка: Разные

Рейтинг: 1335.5



Считать должен правильно, я проверял только на простых числах... Которые в уме могу посчитать. Алгоритм должен быть правильный)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
IlluminatI
сообщение 11.8.2011, 8:04


Ветеран
*****

Группа: Пользователи
Сообщений: 670
Регистрация: 15.8.2009
Из: Украина, г.Харьков
Пользователь №: 204 570
Модель телефона: [DROID MAXX][RAZR M]


Настроение:
139



Рейтинг: 520



в hex можно делать проверку: если от 0 до 9 то записывать цифру, а для букв можно оставить эту часть кода, а если есть что-то вроде switch() то юзать его. Для bin и oct, можно создать массив из двух элементов, с числами 2 и 8, и часть кода bin засунуть в цикл.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
igoripp
сообщение 11.8.2011, 8:05


Самый дерзкий
******

Группа: Пользователи
Сообщений: 1 412
Регистрация: 27.3.2010
Из: Касимов, Муром
Пользователь №: 215 540
Модель телефона: sony ion
Прошивка: Разные

Рейтинг: 1335.5



Там и так цикл есть)

Добавлено позже (11.8.2011, 12:06):
Насчет хекс, ты прав) а остальное я не понял(
until это и есть цикл

Сообщение отредактировал igoripp - 11.8.2011, 8:08
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
IlluminatI
сообщение 11.8.2011, 8:48


Ветеран
*****

Группа: Пользователи
Сообщений: 670
Регистрация: 15.8.2009
Из: Украина, г.Харьков
Пользователь №: 204 570
Модель телефона: [DROID MAXX][RAZR M]


Настроение:
139



Рейтинг: 520



я сишными вставками покажу)
Код

int ss[2] = { 2, 8 };
for( int i = 0; i < 2; i++ )
{
until [ $d -eq 0 ]
do
e=$(( $d % ss[i] ))
echo $e>>def.txt
d=$(( $d / ss[i] ))
done
}

вот такой код переводит в двоичную и восьмеричную системы счисления
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Programmer-tm(Мотофан.)
сообщение 11.8.2011, 9:20


Мотофан
*******

Группа: Пользователи
Сообщений: 1 681
Регистрация: 21.3.2010
Из: Из мира сего
Пользователь №: 215 291
Модель телефона: Moto X Play
Прошивка: Модифицированная...


Настроение:
Делать невозможное возможным...



Рейтинг: 620



Ребят. Давайте подумаем, как сделать русско английский перевод нормально.
Пока у меня такая идея:

Код

Perevod()
{
slovo=`showTextEntry 0 "Translator" "Введите текст:"`
if [ "$slovo" = "" ]
then
    showQ "Translator" "Я не могу перевести пустоту... Введёте слово снова?" 1
    tmp1="$?"
    if [ "$tmp1" = "1" ]
    then
        Perevod
    else
        showNotify "Translator" "Вы отаказались от ввода..." 0 2
        exit
    fi
else
    if sed "/^$slovo/!d" $mypath/data2/bd
    then
        text="`sed "/^$slovo/!d" $mypath/data2/bd`"
        showQ "Translator" "$text" 2
    else
        showNotify "Translator" "Извините, но такого слова нету в моей базе..." 0 2
        exit
    fi
fi
}
Perevod


Ну тут он дофига ненужных строк ещё припысывает...
Вот думаю как побороть...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Написание скриптов #!/bin/sh for UNIX, Кто поможет? · Motorola на Linux OS · Forum
 

26 страниц V « < 6 7 8 9 10 > » 
Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 26.4.2024, 8:00

Форум живёт: