>
, >>
, <
, <<
, 2>
, >&1
, >&2
;
|
(ex. ps|grep a
)&&
/ ||
( ...; ...; )
{ ...; ...; }
(ex. grep pattern testfile || { echo "Pattern not found"; return; }
$
: precede nume de variabile, comenzi, expresii:
$NUME
sau ${NUME}
va fi înlocuit cu conținutul variabilei NUME
(ex. a=3;echo $a
)$(comanda)
(sau `comanda`
) va fi înlocuit cu rezultatul execuției comenzii comanda
(ex. a=$(ls)
)$((expresie))
va fi înlocuit cu rezultatul expresiei expresie
(ex. echo "$((2+3))"
)!
: extrage (porțiuni de) comenzi din istoric (!!
= comanda anterioară)#
: introduce comentariicat *.txt
=> cat 1.txt 2.txt
(dacă în directorul curent există doar fișierele 1.txt
și 2.txt
cu extensia txt)'...'
sau "..."
echo "$((1 + 2))"
!= echo '$((1 + 2))'
)shift
, read
, sleep
, exit
, echo
, test
([ ... ]
), export
, expr
($((...))
), basename
, clear
, date
, mail
, uptime
, df
, fg
, bg
file
, pwd
, cat
, find
, locate
, file
, more
, less
, rm
, mkdir
, rmdir
, cp
, mv
, cd
, chmod
, chown
, ln
, touch
, du
, cut
, sort
, uniq
, cmp
, diff
, head
, tail
, wc
, split
finger
, w
, who
, ps
, last
, id
, users
netstat
, ping
, hostname
, host
, ftp
, who
#!/bin/bash
(sau #!/bin/sh
)chmod +x script
./script
(dacă are +x
) sau sh script
$1
, $2
, …
$@
sau $*
"$@"
= "$1" "$2" ...
(de ex. pentru fișiere ce conțin spații în nume)"$*"
concatenează parametrii, spre deosebire de "$@"
: "$*"
= "$1 $2 ..."
a="un text"
if ...; then ...; fi
for var in `seq 1 10`; do ...; done
for f in `ls`; do cat $f; done
extragerea tuturor URL-urilor din fișiere .txt ce conțin și o adresă email:
#!/bin/bash
for f in `find -type f -name '*.txt'`; do
if grep -iq '\w\+@\w\+\.\w\+' "$f"; then
grep -io 'https\?://[a-z0-9_./%+]\+' "$f"
fi
done
#!/bin/bash
find -type f -name '*.txt'|while read f; do
if grep -iq '\w\+@\w\+\.\w\+' "$f"; then
grep -io 'https\?://[a-z0-9_./%+~-]\+' "$f"
fi
done
#!/bin/bash
find -type f -name '*.txt' -exec grep -iq '\w\+@\w\+\.\w\+' "{}" \; -exec grep -io 'https\?://\S\+' "{}" \;
find
are mai mulți parametri -exec
, prima comandă ce nu returnează 0 împiedică execuția următoarelornumărul mediu de linii din fișierele de tip text din directorul curent:
#!/bin/bash
export sum=0
export cnt=0
find -type f | ( while read f; do
if file "$f" | grep -q "ASCII text"; then
c=`cat "$f"|wc -l`
sum=$(($sum+$c))
cnt=$(($cnt+1))
fi
done
echo "sum: $sum; cnt: $cnt; avg: $(($sum/$cnt))" )
while
e grupată cu echo-ul final pentru a “vedea” aceleași variabilefolosind fișierul /etc/passwd
de pe linux.scs.ubbcluj.ro afișați câte grupe conțin studenți cu numele Dan care au număr matricol par:
#!/bin/bash
grep “^[^:]*[02468]:.*\<Dan\>” /etc/passwd | awk -F: ‘{print $6}’ | sed “s/.*\/gr\([0-9]\+\)\/.*/\1/”| sort | uniq | wc -l
monitorizarea existenței unui fișier (citit de la tastatură) într-unul din directoarele date ca parametru:
#!/bin/bash
echo -n "Fisier:"; read fis
while true; do
for d in "$@"; do
if [ -e "$d/$fis" ]; then
echo "Exista $fis in $d"
fi
done
sleep 1
done
să se afișeze cuvintele din toate fișierele date ca parametri in linia de comandă în ordinea descrescătoare a numărului de apariții:
#!/bin/bash
for f in $*; do
grep -io '\b[a-z]\+\b' $f
done|sort|uniq -c|sort -r -n -k1|awk '{ print $NF }'
find
, file
, wc
).head
, tail
, find
, file
, wc
).find -perm
, mv
).test
, wc
, awk
, find
).shift
, awk
)sort
, uniq
, head
).find
, chmod
, read
)