LINUX.ORG.RU
ФорумTalks

Давайте поделимся «секретами» использования Shell(BASH)?


0

0

Я, например, пользуюсь такой функцией:
function unpack()
{
#Usage: unpack archive destination_dir
case $1 in
*tar.gz) tar xvzf $1 -C $2;;
*tar.bz2) tar xjvf $1 -C $2;;
esac
}
Еще есть стек каталогов(popt) но я с ним еще толком не разобрался. Буду дальше маны читать...

anonymous

Самое веселое, что я написал на bash'е, был скриптец разбора PS на брошюру :)

Ay49Mihas ★★★★
()

Давайте лучше делится секретами использования shell (tclsh).

Я, например, пользуюсь такой функцией:

proc all {varName "in" list "where" condition} { upvar 1 $varName var set res {} foreach var $list { if {[uplevel 1 expr $condition]} {lappend res $var} } set res }

Есть там ищо что-то, но я с этим не разбирался и не буду.

anonymous
()

echo `uptime|grep days|sed 's/.*up \([0-9]*\) day.*/\1\/10+/'; cat /proc/cpuinfo|grep '^cpu MHz'|awk '{print $4"/30 +";}';free|grep '^Mem'|awk '{print $3"/1024/3+"}'; df -P -k -x nfs -x smbfs | grep -v '(1k|1024)-blocks' | awk '{if ($1 ~ "/dev/(scsi|sd)"){ s+= $2} s+= $2;} END {print s/1024/50"/15+70";}'`|bc|sed 's/\(.$\)/.\1cm/'

найдено здесь: http://dev.gentoo.org/~vapier/vpenis

thand
()
Ответ на: комментарий от anonymous

>Если б еще с юзер лайн бреак...

Так по ссылке сходи

Orlangoor ★★★★★
()
Ответ на: комментарий от theserg

>очень удобный сриптец, называет forall:

:up: =)

WerNA ★★★★★
()

А вот как я использую bashscripting. Ничего особенного, но помогает в повседневной жизни.

1.

/*
fast_screen.sh
Скрипт делает скриншот и заливает его на ftp. После чего даёт ссылку на файл. Очень удобно, когда надо быстро показать собеседнику скриншот.
*/

FILENAME="$(date '+%d.%m.%y_%k:%M')"
/usr/bin/import -silent -quality 85 -display :0 -window root /home/anton/fast_screenshots/$FILENAME.jpg
echo $FILENAME > /home/anton/bin/tmpfile
echo "open ftp://selecter@zone.ee" > /home/anton/bin/commands_fast_screen
echo "cd fast_screenshots" >> /home/anton/bin/commands_fast_screen
echo "put /home/anton/fast_screenshots/$FILENAME.jpg" >> /home/anton/bin/commands_fast_screen
echo "exit" >> /home/anton/bin/commands_fast_screen
lftp -f /home/anton/bin/commands_fast_screen
echo "http://zone.ee/selecter/fast_screenshots/$FILENAME.jpg"

/*commands_fast_screen*/

open ftp://selecter@zone.ee
cd fast_screenshots
put /home/anton/fast_screenshots/21.01.05_17:10.jpg
exit

2.

/*
convertimage.sh
Преобразует все png в директории в jpg. Обычно я держу фотки в png.
*/

for i in *
do
   convert -quality 90 $i $i.jpg
   rename 's/\.png.jpg$/.jpg/' *.png.jpg
done

mkdir jpg
mv *.jpg jpg/

3.

/*
do_backup.sh
Просто скриптик для проведения автоматического резервного копирования.
*/

STORAGE="/root"
STORAGE_M="/root"
CDRW="/dev/hdd"
EXCLUDE="--exclude=/home/andrei/Desktop/Корзина --exclude=/cdrom --exclude=/dev --exclude=/distro --exclude=/media --exclude=/mnt --exclude=/proc --exclude=/srv --exclude=/sys --exclude=/tmp --exclude=/tools --exclude=/vmlinuz --exclude=/home/anton/ISO --exclude=/home/andrei/MP3 --exclude=/var/cache/apt/archives --exclude=/home/anton/cron_screenshots"

echo "Starting archiving..."
echo "Please enter your password (sudo)"
sudo tar -czvpf $STORAGE_M/backup.tar.gz / $EXCLUDE --exclude=$STORAGE_M
echo "Testing archive..."
sudo gzip --test $STORAGE_M/backup.tar.gz
echo "Splitting archive..."
sudo split -d -b 700m $STORAGE_M/backup.tar.gz $STORAGE/backup.tar.gz_
echo "Deleting unnecessary files..."
sudo rm $STORAGE_M/backup.tar.gz

eject $CDRW
echo "Please insert CDRW media for burning backup files..."

for SLICE in `ls $STORAGE/backup.tar.gz_*`
do
        while true
        do
        TIME=`/usr/bin/time -f %e eject $CDRW 2>&1`
        #if (( $[ $TIME > 20 ] )) ; then
        if (( `echo "$TIME > 1.0" | bc` )) ; then
                #echo $TIME
                echo "Starting blanking && burning..."
                cdrecord -blank=fast dev=ATA:1,1,0
                mkisofs -r $SLICE | cdrecord -v dev=ATA:1,1,0 -
                eject $CDRW
                echo "Please insert another CDRW media for burning backup files..."
                break
        fi
        sleep 5
        done
done

echo "The system was backuped successfuly!"

4.

/*
get_photos_from_camera.sh
*/
mount /dev/sda1 &> /dev/null &&  (cp -v --reply=query /mnt/camera/*/*/* /home/fotos/raw && umount /mnt/camera && echo "Готово") || echo "А камеру кто подключать будет?"

5.

/*set_sgid_recursively.sh*/
find . -type d | sed -e 's/ /\\ /g' | xargs chmod g+s

Selecter ★★★★
()
Ответ на: комментарий от anonymous

#WAIT-WGET BEGIN
#Выводит лог работы wget, когда он запущен, скрывает, когда
#не запущен
#!/bin/sh
PROG="qget"
stat=0
function is_run()
{
if [ "no`ps -A | grep $1`" != 'no' ]
then
return 0
else
return 4
fi
}
function hide()
{
sleep 4
if ! is_run $PROG
then
killall root-tail -q;
fi
}
while :
do
if is_run $PROG
then
if [ $stat = 0 ]
then
nget -rt2 &
stat=1
fi
else
stat=0
hide;
fi
sleep 2
done
#WAIT_WGET-END
#NGET_BEGIN
#Интерфейс к wget
#!/bin/sh
function hlp()
{
echo " -d download files form d-list"
echo " -c reset d-list"
echo " -e edit d-list"
echo " -cl clear logfile"
echo " -rt watch logfile in X11 root window"
echo " -w watch logfile"
echo "-l or -l2 list downloaded files and their size"
echo "help view this help and exit"
};
cd ~/env/dlds
case $1 in
-d)
exec >> /dev/null;
(exec nohup wget -i ~/env/share/lists/downloads -c -a ~/env/var/nget.log -v -t 30 &);;
-c)
rm ~/env/share/lists/downloads -f;
touch ~/env/share/lists/downloads;;
-cl)
rm ~/env/var/nget.log -f;
touch ~/env/var/nget.log;;
-e) exec vi ~/env/share/lists/downloads;;
-w) exec tail -f ~/env/var/nget.log;;
-rt) exec root-tail --font '-xos4-terminus-medium-*-normal-*-14-140-*-72-*-*-koi8-u' ~/env/var/nget.log,LightGrey --geometry 640x178+1-17 --update --shade &
;;
-rt2) exec root-tail --font '-xos4-terminus-medium-*-normal-*-14-140-*-72-*-*-koi8-u' /home/downloader/logs/wget.log,LightGrey --geometry 640x178+1-17 --update --shade &
;;
-l) ls -hs ~/env/dlds;;
-l2) ls -si ~/env/dlds;;
help) hlp;;
*) hlp;;
esac
#NGET_END

anonymous
()

Я читал, что если перед командой в баше есть пробел, команда не записывается в .bash_history. Пробовал, оказалось нетак. Может ктонть просветить по этому вопросу?

bugmaker ★★★★☆
()
Ответ на: комментарий от bugmaker

 HISTCONTROL
              If  set  to a value of ignorespace, lines which begin with a space character are not
              entered on the history list.  If set to a value of ignoredups,  lines  matching  the
              last  history line are not entered.  A value of ignoreboth combines the two options.
              If unset, or if set to any other value than those  above,  all  lines  read  by  the
              parser  are  saved  on  the  history list, subject to the value of HISTIGNORE.  This
              variable's function is superseded by HISTIGNORE.  The second and subsequent lines of
              a  multi-line  compound command are not tested, and are added to the history regard-
              less of the value of HISTCONTROL.

С тебя 50$.

anonymous
()

из ~/.bashrc

shopt -s cdspell
export CDPATH=.:~:/

Хорошо идет к пиву ;)

W98
()
Ответ на: комментарий от anonymous

> Некрасиво так шутить!

А я не шучу:)

Igron ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.