Bash: различия между версиями
Vovan (обсуждение | вклад) |
Vovan (обсуждение | вклад) |
||
(не показаны 22 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
+ | ==resizer.sh== | ||
+ | |||
+ | #!/bin/bash | ||
+ | imgprefix='resized' | ||
+ | mkdir CONVERTED | ||
+ | for i in $(ls *.jpeg) | ||
+ | do | ||
+ | convert -resize 600x800 $i CONVERTED/$imgprefix-$i | ||
+ | echo "Foto $i converted to $imgprefix-$i" | ||
+ | done | ||
+ | |||
+ | ==Ссылки== | ||
+ | [http://www.k-max.name/linux/osnovnye-komandy-linux-ili-shpargalka-nachinayushhego-linuksojda клевый список по командам --- http://www.k-max.name/linux/osnovnye-komandy-linux-ili-shpargalka-nachinayushhego-linuksojda] | ||
+ | |||
==Работа с файлами содержащими пробелы== | ==Работа с файлами содержащими пробелы== | ||
Строка 29: | Строка 43: | ||
done | done | ||
− | ==Бэкапы с уделением бэкапов | + | ==Бэкапы с уделением бэкапов старше 30 дней== |
#!/bin/bash | #!/bin/bash | ||
Строка 47: | Строка 61: | ||
fi | fi | ||
done | done | ||
+ | |||
+ | ==Убрать теги из html== | ||
+ | Как работает sed | ||
+ | sed 's/чего/на что/g' index.html | ||
+ | или | ||
+ | cat index.html | sed 's/чего/на что/g' | ||
+ | |||
+ | Задача: Есть файл index.html, содержащий текст и теги. Нужно удалить из файла все теги и оставить только голый текст. | ||
+ | |||
+ | index.html: | ||
+ | <pre> | ||
+ | <p><b>Википедия</b> — свободная энциклопедия, в которой<br> | ||
+ | <i>каждый</i> может изменить или дополнить любую статью</p> | ||
+ | </pre> | ||
+ | |||
+ | Скрипт: | ||
+ | cat index.html | sed 's/<[ \=\"a-zA-Z0-9\/]*>//g' | ||
+ | |||
+ | |||
+ | <[a-zA-Z0-9\/]*> - означает, искать строку, начинающуюся с символа "<" и заканчивающейся ">" и любым количеством символов из набора [a-zA-Z0-9\/] между ними (* - любое кол-во символов из набора). | ||
+ | |||
+ | ==Замена в файле sources.list== | ||
+ | |||
+ | Замена в файле /etc/apt/sources.list одной версии дистрибутива (lucid) на другую (precise). | ||
+ | |||
+ | sed 's/lucid/precise/g' /etc/apt/sources.list | ||
+ | |||
+ | Заменить в файле /etc/apt/sources.list адрес репозитория с http://security.ubuntu.com/ubuntu на ftp://repo/repository<br> | ||
+ | deb http://security.ubuntu.com/ubuntu lucid-security main restricted<br> | ||
+ | deb http://security.ubuntu.com/ubuntu precise-security main restricted | ||
+ | |||
+ | sed 's/lucid/precise/g' /etc/apt/sources.list | sed 's/http:\/\/security.ubuntu.com\/ubuntu/ftp:\/\/repo\/repository/g' #Не забыть заэкранировать спецсимвол "/" использующийся в URL | ||
+ | |||
+ | ==Преобразование текста== | ||
+ | [[media:mac-ip.txt]] | ||
+ | {| | ||
+ | !Есть список Mac и соответствующих IP | ||
+ | !Нужно получить конфигурационный файл dhcpd.conf вида: | ||
+ | |- | ||
+ | | | ||
+ | <pre> | ||
+ | 0A-71-91-5C-C3-93 192.168.10.5 | ||
+ | CD-FC-BD-4C-4E-E5 192.168.10.6 | ||
+ | E4-2C-53-4C-AB-94 192.168.10.7 | ||
+ | 9F-5B-44-F4-F4-0C 192.168.10.8 | ||
+ | 7A-62-27-8E-FC-4E 192.168.10.9 | ||
+ | 10-06-C0-A1-62-84 192.168.10.10 | ||
+ | 34-30-80-F2-7C-CF 192.168.10.11 | ||
+ | D7-61-FB-2B-AD-A7 192.168.10.12 | ||
+ | C0-4D-02-04-41-F7 192.168.10.13 | ||
+ | 10-BC-59-38-4A-55 192.168.10.14 | ||
+ | 87-5B-5C-47-FC-BF 192.168.10.15 | ||
+ | CC-31-EF-4C-24-6C 192.168.10.16 | ||
+ | </pre> | ||
+ | | | ||
+ | <pre> | ||
+ | host office-pc-05 { | ||
+ | hardware ethernet 0A:71:91:5C:C3:93; | ||
+ | fixed-address 192.168.10.5; | ||
+ | } | ||
+ | </pre> | ||
+ | |} | ||
+ | |||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | |||
+ | for i in $(cat mac-ip.txt|awk '{print $1"_"$2}') #Берем строку и заменяем в ней разделяющий слова ПРОБЕЛ на символ "_" (в дальнейшем по нему будет разрезать строку) | ||
+ | do | ||
+ | mac=$(echo $i|sed 's/-/:/g'|awk -F "_" '{print $1}') #Выводим строку из переменной i в поток, заменяем все символы "-" на символ ":", разбираем строку по символу "_" и берем только первое свлово | ||
+ | ip=$(echo $i|awk -F "_" '{print $2}') #Выводим строку из переменной i в поток, разбираем строку по символу "_", берем только второе слово | ||
+ | hostNumber=$(echo $ip|awk -F "." '{print $4}') #Выводим строку из переменной ip, разбираем строку по символу ".", берем только 4-е слово (используем его для формирования имени хоста) | ||
+ | echo "host office-pc.$hostNumber {" >>dhcpd.conf | ||
+ | echo "hardware ethernet $mac;" >>dhcpd.conf | ||
+ | echo "fixed-addres $ip;" >>dhcpd.conf | ||
+ | echo "}" >>dhcpd.conf | ||
+ | echo "" >>dhcpd.conf | ||
+ | done | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | Возможно решить данную задачу командой в одну строку. Но нету возможности фирмировать имя хоста в соответствии с IP | ||
+ | cat mac-ip.txt | sed 's/-/:/g' | awk '{ print "host office-pc- {\n hardware ethrenet " $1 ";\n fixed-address " $2 ";\n }" | ||
+ | |||
+ | ==Магия с изображениями при подготовке скриншотов== | ||
+ | |||
+ | для запуска любой из команды нужно встать в каталог с файлами изображений и открыть терминал | ||
+ | |||
+ | переименовать по порядку (копирование) | ||
+ | |||
+ | ls *.png | sort > q.txt;q=1;while read LINE; do cp "$LINE" "image_1_$q.png";q=$(($q+1)); done < q.txt;/bin/rm q.txt | ||
+ | |||
+ | |||
+ | переименовать по порядку (перемещение) | ||
+ | |||
+ | ls *.png | sort > q.txt;q=1;while read LINE; do mv "$LINE" "image_1_$q.png";q=$(($q+1)); done < q.txt;/bin/rm q.txt | ||
+ | |||
+ | переименовать по порядку и приделать рамку серого цвета в 5 пикс. | ||
+ | |||
+ | ls *.png | sort > q.txt;q=1;while read LINE; do montage -border 5 -geometry +0+0 -compose copy -bordercolor gray "$LINE" "image_1_$q.png";/bin/rm "$LINE";echo $q;q=$(($q+1));done < q.txt;/bin/rm q.txt | ||
+ | |||
+ | ==Writer== | ||
+ | |||
+ | Сделать заготовку из картинок для создания лекции: | ||
+ | |||
+ | ls *.png | sort > q.txt;q=1;while read LINE; do echo "Text $LINE<br /><img src=\"$LINE\"><br />">>q.html; done < q.txt;/bin/rm q.txt | ||
+ | |||
+ | Затем открыть файл в браузере и пересохранить в формат html - чтобы создался каталог с изображениями и правильно сформировался html. Затем html импортировать во Writer | ||
+ | |||
+ | |||
+ | ==Разное 1== | ||
+ | |||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | for i in $(ls ./sites-enabled) | ||
+ | do | ||
+ | |||
+ | echo "$i" | ||
+ | |||
+ | cat sites-enabled/$i | sed 's/NameVirtualHost/#NameVirtualHost/g' > /tmp/htmp | ||
+ | cat /tmp/htmp > sites-enabled/$i | ||
+ | |||
+ | done | ||
+ | |||
+ | </pre> |
Текущая версия на 00:32, 27 августа 2018
Содержание
resizer.sh
#!/bin/bash imgprefix='resized' mkdir CONVERTED for i in $(ls *.jpeg) do convert -resize 600x800 $i CONVERTED/$imgprefix-$i echo "Foto $i converted to $imgprefix-$i" done
Ссылки
Работа с файлами содержащими пробелы
#!/bin/bash OLD_IFS=$IFS IFS=$(echo "") for i in $(ls *.odt) do echo "$i" done IFS=$OLD_IFS
(11:31:41) Юрий Азовцев: переопределяем переменную окружения IFS (она содержит символ - разделения слов в строке), меняем его на символ \n - перевода на новую строку - и все хокей
Загрузка файла с хоста уменьшающего скорость
#!/bin/bash #antishaper.sh for i in $(seq 1 100) do wget -c $1 & wget_pid=$! sleep 20s #ожидаем 20 секунд ps ux | grep $wget_pid | grep wget if [ $? -eq '1' ] then exit 1 fi kill $wget_pid done
Бэкапы с уделением бэкапов старше 30 дней
#!/bin/bash #backuper.sh tar -czpf $(date +%Y-%m-%d)-backup.tar.gz $1 echo "Backup Finished" period=2592000 for i in $(ls *-backup.tar.gz) do time=${i%-backup.tar.gz} file_utime=$(date --date="$time" +%s) cur_utime=$(date +%s) if [ $(($cur_utime - $file_utime)) -gt $period ] then rm $i echo "File $i deleted" fi done
Убрать теги из html
Как работает sed
sed 's/чего/на что/g' index.html
или
cat index.html | sed 's/чего/на что/g'
Задача: Есть файл index.html, содержащий текст и теги. Нужно удалить из файла все теги и оставить только голый текст.
index.html:
<p><b>Википедия</b> — свободная энциклопедия, в которой<br> <i>каждый</i> может изменить или дополнить любую статью</p>
Скрипт:
cat index.html | sed 's/<[ \=\"a-zA-Z0-9\/]*>//g'
<[a-zA-Z0-9\/]*> - означает, искать строку, начинающуюся с символа "<" и заканчивающейся ">" и любым количеством символов из набора [a-zA-Z0-9\/] между ними (* - любое кол-во символов из набора).
Замена в файле sources.list
Замена в файле /etc/apt/sources.list одной версии дистрибутива (lucid) на другую (precise).
sed 's/lucid/precise/g' /etc/apt/sources.list
Заменить в файле /etc/apt/sources.list адрес репозитория с http://security.ubuntu.com/ubuntu на ftp://repo/repository
deb http://security.ubuntu.com/ubuntu lucid-security main restricted
deb http://security.ubuntu.com/ubuntu precise-security main restricted
sed 's/lucid/precise/g' /etc/apt/sources.list | sed 's/http:\/\/security.ubuntu.com\/ubuntu/ftp:\/\/repo\/repository/g' #Не забыть заэкранировать спецсимвол "/" использующийся в URL
Преобразование текста
Есть список Mac и соответствующих IP | Нужно получить конфигурационный файл dhcpd.conf вида: |
---|---|
0A-71-91-5C-C3-93 192.168.10.5 CD-FC-BD-4C-4E-E5 192.168.10.6 E4-2C-53-4C-AB-94 192.168.10.7 9F-5B-44-F4-F4-0C 192.168.10.8 7A-62-27-8E-FC-4E 192.168.10.9 10-06-C0-A1-62-84 192.168.10.10 34-30-80-F2-7C-CF 192.168.10.11 D7-61-FB-2B-AD-A7 192.168.10.12 C0-4D-02-04-41-F7 192.168.10.13 10-BC-59-38-4A-55 192.168.10.14 87-5B-5C-47-FC-BF 192.168.10.15 CC-31-EF-4C-24-6C 192.168.10.16 |
host office-pc-05 { hardware ethernet 0A:71:91:5C:C3:93; fixed-address 192.168.10.5; } |
#!/bin/bash for i in $(cat mac-ip.txt|awk '{print $1"_"$2}') #Берем строку и заменяем в ней разделяющий слова ПРОБЕЛ на символ "_" (в дальнейшем по нему будет разрезать строку) do mac=$(echo $i|sed 's/-/:/g'|awk -F "_" '{print $1}') #Выводим строку из переменной i в поток, заменяем все символы "-" на символ ":", разбираем строку по символу "_" и берем только первое свлово ip=$(echo $i|awk -F "_" '{print $2}') #Выводим строку из переменной i в поток, разбираем строку по символу "_", берем только второе слово hostNumber=$(echo $ip|awk -F "." '{print $4}') #Выводим строку из переменной ip, разбираем строку по символу ".", берем только 4-е слово (используем его для формирования имени хоста) echo "host office-pc.$hostNumber {" >>dhcpd.conf echo "hardware ethernet $mac;" >>dhcpd.conf echo "fixed-addres $ip;" >>dhcpd.conf echo "}" >>dhcpd.conf echo "" >>dhcpd.conf done
Возможно решить данную задачу командой в одну строку. Но нету возможности фирмировать имя хоста в соответствии с IP
cat mac-ip.txt | sed 's/-/:/g' | awk '{ print "host office-pc- {\n hardware ethrenet " $1 ";\n fixed-address " $2 ";\n }"
Магия с изображениями при подготовке скриншотов
для запуска любой из команды нужно встать в каталог с файлами изображений и открыть терминал
переименовать по порядку (копирование)
ls *.png | sort > q.txt;q=1;while read LINE; do cp "$LINE" "image_1_$q.png";q=$(($q+1)); done < q.txt;/bin/rm q.txt
переименовать по порядку (перемещение)
ls *.png | sort > q.txt;q=1;while read LINE; do mv "$LINE" "image_1_$q.png";q=$(($q+1)); done < q.txt;/bin/rm q.txt
переименовать по порядку и приделать рамку серого цвета в 5 пикс.
ls *.png | sort > q.txt;q=1;while read LINE; do montage -border 5 -geometry +0+0 -compose copy -bordercolor gray "$LINE" "image_1_$q.png";/bin/rm "$LINE";echo $q;q=$(($q+1));done < q.txt;/bin/rm q.txt
Writer
Сделать заготовку из картинок для создания лекции:
ls *.png | sort > q.txt;q=1;while read LINE; do echo "Text $LINE
<img src=\"$LINE\">
">>q.html; done < q.txt;/bin/rm q.txt
Затем открыть файл в браузере и пересохранить в формат html - чтобы создался каталог с изображениями и правильно сформировался html. Затем html импортировать во Writer
Разное 1
#!/bin/bash for i in $(ls ./sites-enabled) do echo "$i" cat sites-enabled/$i | sed 's/NameVirtualHost/#NameVirtualHost/g' > /tmp/htmp cat /tmp/htmp > sites-enabled/$i done