ºìÁªLinuxÃÅ»§
Linux°ïÖú

LinuxÌØÊâ·ûºÅ´óÈ«ÕûÀí

·¢²¼Ê±¼ä:2014-06-29 10:56:03À´Ô´:ºìÁª×÷Õß:velcbo
ÔÚshellÖг£ÓõÄÌØÊâ·ûºÅÂÞÁÐÈçÏ£º

# ; ;; . , / \ 'string'| ! $ ${} $? $$ $* "string"* ** ? : ^ $# $@ `command`{} [] [[]] () (()) || && {xx,yy,zz,...}~ ~+ ~- & \<...\> + - %= == !=

# ¾®ºÅ (comments)
Õ⼸ºõÊǸöÂú³¡¶¼ÓеķûºÅ£¬³ýÁËÏÈǰÒѾ­Ìá¹ýµÄ"µÚÒ»ÐÐ"
#!/bin/bash
¾®ºÅÒ²³£³öÏÖÔÚÒ»ÐеĿªÍ·£¬»òÕßλÓÚÍêÕûÖ¸ÁîÖ®ºó£¬ÕâÀàÇé¿ö±íʾ·ûºÅºóÃæµÄÊÇ×¢½âÎÄ×Ö£¬²»»á±»Ö´ÐС£
# This line is comments.
echo "a = $a" # a = 0
ÓÉÓÚÕâ¸öÌØÐÔ£¬µ±ÁÙʱ²»ÏëÖ´ÐÐijÐÐÖ¸Áîʱ£¬Ö»ÐèÔÚ¸ÃÐпªÍ·¼ÓÉÏ # ¾ÍÐÐÁË¡£Õâ³£ÓÃÔÚ׫д¹ý³ÌÖС£
#echo "a = $a" # a = 0
Èç¹û±»ÓÃÔÚÖ¸ÁîÖУ¬»òÕßÒýºÅË«ÒýºÅÀ¨×¡µÄ»°£¬»òÕßÔÚµ¹Ð±ÏߵĺóÃæ£¬ÄÇËû¾Í±ä³ÉÒ»°ã·ûºÅ£¬²»¾ßÉÏÊöµÄÌØÊ⹦ÄÜ¡£


~ ÕÊ»§µÄ home Ŀ¼
ËãÊǸö³£¼ûµÄ·ûºÅ£¬´ú±íʹÓÃÕßµÄ home Ŀ¼£ºcd ~£»Ò²¿ÉÒÔÖ±½ÓÔÚ·ûºÅºó¼ÓÉÏijÕÊ»§µÄÃû³Æ£ºcd ~user»òÕßµ±³ÉÊÇ·¾¶µÄÒ»²¿·Ý£º~/bin
~+ µ±Ç°µÄ¹¤×÷Ŀ¼£¬Õâ¸ö·ûºÅ´ú±íµ±Ç°µÄ¹¤×÷Ŀ¼£¬ËýºÍÄÚ½¨Ö¸Áî pwdµÄ×÷ÓÃÊÇÏàͬµÄ¡£
# echo ~+/var/log
~- ÉϴεŤ×÷Ŀ¼£¬Õâ¸ö·ûºÅ´ú±íÉϴεŤ×÷Ŀ¼¡£
# echo ~-/etc/httpd/logs


; ·ÖºÅ (Command separator)
ÔÚ shell ÖУ¬µ£ÈÎ"Á¬ÐøÖ¸Áî"¹¦ÄܵķûºÅ¾ÍÊÇ"·ÖºÅ"¡£Æ©ÈçÒÔϵÄÀý×Ó£ºcd ~/backup ; mkdir startup ;cp ~/.* startup/.


;; Á¬Ðø·ÖºÅ (Terminator)
רÓÃÔÚ case µÄÑ¡Ïµ£ÈÎ Terminator µÄ½ÇÉ«¡£
case "$fop" inhelp) echo "Usage: Command -help -version filename";;version) echo "version 0.1" ;;esac


. ¶ººÅ (dot,¾ÍÊÇ¡°µã¡±)
ÔÚ shell ÖУ¬Ê¹ÓÃÕßÓ¦¸Ã¶¼Çå³þ£¬Ò»¸ö dot ´ú±íµ±Ç°Ä¿Â¼£¬Á½¸ö dot ´ú±íÉϲãĿ¼¡£
CDPATH=.:~:/home:/home/web:/var:/usr/local
ÔÚÉÏÐÐ CDPATH µÄÉ趨ÖУ¬µÈºÅºóµÄ dot ´ú±íµÄ¾ÍÊǵ±Ç°Ä¿Â¼µÄÒâ˼¡£
Èç¹ûµµ°¸Ãû³ÆÒÔ dot ¿ªÍ·£¬¸Ãµµ°¸¾ÍÊôÌØÊâµµ°¸£¬Óà ls Ö¸Áî±ØÐë¼ÓÉÏ -a Ñ¡Ïî²Å»áÏÔʾ¡£³ý´ËÖ®Í⣬ÔÚ regularexpression ÖУ¬Ò»¸ö dot ´ú±íÆ¥ÅäÒ»¸ö×ÖÔª¡£


'string' µ¥ÒýºÅ (single quote)
±»µ¥ÒýºÅÓÃÀ¨×¡µÄÄÚÈÝ£¬½«±»ÊÓΪµ¥Ò»×Ö´®¡£ÔÚÒýºÅÄڵĴú±í±äÊýµÄ$·ûºÅ£¬Ã»ÓÐ×÷Óã¬Ò²¾ÍÊÇ˵£¬Ëû±»ÊÓΪһ°ã·ûºÅ´¦Àí£¬·ÀÖ¹ÈκαäÁ¿Ìæ»»¡£
heyyou=homeecho '$heyyou' # We get $heyyou


"string" Ë«ÒýºÅ (double quote)
±»Ë«ÒýºÅÓÃÀ¨×¡µÄÄÚÈÝ£¬½«±»ÊÓΪµ¥Ò»×Ö´®¡£Ëü·ÀֹͨÅä·ûÀ©Õ¹£¬µ«ÔÊÐí±äÁ¿À©Õ¹¡£ÕâµãÓëµ¥ÒýÊýµÄ´¦Àí·½Ê½²»Í¬¡£
heyyou=homeecho "$heyyou" # We get home

`command` µ¹ÒýºÅ (backticks)
ÔÚÇ°ÃæµÄµ¥Ë«ÒýºÅ£¬À¨×¡µÄÊÇ×Ö´®£¬µ«Èç¹û¸Ã×Ö´®ÊÇÒ»ÁÐÃüÁîÁУ¬»áÔõÑù£¿´ð°¸ÊDz»»áÖ´ÐС£Òª´¦ÀíÕâÖÖÇé¿ö£¬ÎÒÃǵÃÓõ¹µ¥ÒýºÅÀ´×ö¡£
fdv=`date +%F`echo "Today $fdv"
ÔÚµ¹ÒýºÅÄÚµÄ date +%F »á±»ÊÓΪָÁִÐеĽá¹û»á´øÈë fdv ±äÊýÖС£


, ¶ºµã (comma£¬±êµãÖеĶººÅ)
Õâ¸ö·ûºÅ³£ÔËÓÃÔÚÔËËãµ±Öе±×ö"Çø¸ô"ÓÃ;¡£ÈçÏÂÀý
#!/bin/bashlet "t1 = ((a = 5 + 3, b = 7 - 1, c = 15 / 3))"echo "t1= $t1, a = $a, b = $b"


/ бÏß (forward slash)
ÔÚ·¾¶±íʾʱ£¬´ú±íĿ¼¡£
cd /etc/rc.dcd ../..cd /
ͨ³£µ¥Ò»µÄ / ´ú±í root ¸ùĿ¼µÄÒâ˼£»ÔÚËÄÔòÔËËãÖУ¬´ú±í³ý·¨µÄ·ûºÅ¡£
let "num1 = ((a = 10 / 2, b = 25 / 5))"


\ µ¹Ð±Ïß
ÔÚ½»»¥Ä£Ê½ÏµÄescape ×ÖÔª£¬Óм¸¸ö×÷Óã»·ÅÔÚÖ¸Áîǰ£¬ÓÐÈ¡Ïû aliasesµÄ×÷Óã»·ÅÔÚÌØÊâ·ûºÅǰ£¬Ôò¸ÃÌØÊâ·ûºÅµÄ×÷ÓÃÏûʧ£»·ÅÔÚÖ¸ÁîµÄ×îÄ©¶Ë£¬±íʾָÁîÁ¬½ÓÏÂÒ»ÐС£
# type rmrm is aliased to `rm -i'# \rm ./*.log
ÉÏÀý£¬ÎÒÔÚ rm Ö¸Áîǰ¼ÓÉÏ escape ×ÖÔª£¬×÷ÓÃÊÇÔÝʱȡÏû±ðÃûµÄ¹¦ÄÜ£¬½« rm Ö¸Áԭ¡£
# bkdir=/home# echo "Backup dir, \$bkdir = $bkdir"Backup dir,$bkdir = /home
ÉÏÀý echo ÄÚµÄ \$bkdir£¬escape ½« $ ±äÊýµÄ¹¦ÄÜÈ¡ÏûÁË£¬Òò´Ë£¬»áÊä³ö $bkdir£¬¶øµÚ¶þ¸ö $bkdirÔò»áÊä³ö±äÊýµÄÄÚÈÝ /home¡£


| ¹ÜµÀ (pipeline)
pipeline ÊÇ UNIX ϵͳ£¬»ù´¡ÇÒÖØÒªµÄ¹ÛÄî¡£Á¬½áÉϸöÖ¸ÁîµÄ±ê×¼Êä³ö£¬×öΪϸöÖ¸ÁîµÄ±ê×¼ÊäÈë¡£
who | wc -l
ÉÆÓÃÕâ¸ö¹ÛÄ¶Ô¾«¼ò script ÓÐÏ൱µÄ°ïÖú¡£


! ¾ªÌ¾ºÅ(negate or reverse)
ͨ³£Ëü´ú±í·´Âß¼­µÄ×÷Óã¬Æ©ÈçÌõ¼þÕì²âÖУ¬Óà != À´´ú±í"²»µÈÓÚ"
if [ "$?" != 0 ]thenecho "Executes error"exit 1fi
ÔÚ¹æÔò±í´ïʽÖÐËýµ£ÈÎ "·´Âß¼­" µÄ½ÇÉ«
ls a[!0-9]
ÉÏÀý£¬´ú±íÏÔʾ³ýÁËa0, a1 .... a9 Õ⼸¸öÎļþµÄÆäËûÎļþ¡£


: ðºÅ
ÔÚ bash ÖУ¬ÕâÊÇÒ»¸öÄÚ½¨Ö¸Á"ʲôʶ¼²»¸É"£¬µ«·µ»Ø×´Ì¬Öµ 0¡£
:
echo $? # »ØÓ¦Îª 0
: > f.$$
ÉÏÃæÕâÒ»ÐУ¬Ï൱ÓÚ cat /dev/null >f.$$¡£²»½öд·¨¼ò¶ÌÁË£¬¶øÇÒÖ´ÐÐЧÂÊÒ²ºÃÉÏÐí¶à¡£
ÓÐʱ£¬Ò²»á³öÏÖÒÔÏÂÕâÀàµÄÓ÷¨
: ${HOSTNAME?} ${USER?} ${MAIL?}
ÕâÐеÄ×÷ÓÃÊÇ£¬¼ì²éÕâЩ»·¾³±äÊýÊÇ·ñÒÑÉèÖã¬Ã»ÓÐÉèÖõĽ«»áÒÔ±ê×¼´íÎóÏÔʾ´íÎóѶϢ¡£ÏñÕâÖÖ¼ì²éÈç¹ûʹÓÃÀàËÆ test »ò ifÕâÀàµÄ×ö·¨£¬»ù±¾ÉÏÒ²¿ÉÒÔ´¦Àí£¬µ«¶¼±È²»ÉÏÉÏÀýµÄ¼ò½àÓëЧÂÊ¡£
³ýÁËÉÏÊöÖ®Í⣬»¹ÓÐÒ»¸öµØ·½±ØÐëʹÓÃðºÅ
PATH=$PATH:$HOME/fbin:$HOME/fperl:/usr/local/mozilla
ÔÚʹÓÃÕß×Ô¼ºµÄHOME Ŀ¼Ï嵀 .bash_profile»òÈκι¦ÄÜÏàËÆµÄµµ°¸ÖУ¬É趨¹ØÓÚ"·¾¶"µÄ³¡ºÏÖУ¬ÎÒÃǶ¼Ê¹ÓÃðºÅ£¬À´×öÇø¸ô¡£


? ÎʺŠ(wild card)
ÔÚÎļþÃûÀ©Õ¹(Filename expansion)ÉϰçÑݵĽÇÉ«ÊÇÆ¥ÅäÒ»¸öÈÎÒâµÄ×ÖÔª£¬µ«²»°üº¬ null ×ÖÔª¡£
# ls a?a1
ÉÆÓÃËýµÄÌØµã£¬¿ÉÒÔ×ö±È½Ï¾«È·µÄµµÃûÆ¥Åä¡£


* ÐǺŠ(wild card)
Ï൱³£ÓõķûºÅ¡£ÔÚÎļþÃûÀ©Õ¹(Filename expansion)ÉÏ£¬ËýÓÃÀ´´ú±íÈκÎ×ÖÔª£¬°üº¬ null ×ÖÔª¡£
# ls a*a a1 access_log
ÔÚÔËËãʱ£¬ËüÔò´ú±í "³Ë·¨"¡£
let "fmult=2*3"
³ýÁËÄÚ½¨Ö¸Áî let£¬»¹ÓÐÒ»¸ö¹ØÓÚÔËËãµÄÖ¸Áîexpr£¬ÐǺÅÔÚÕâÀïÒ²µ£ÈÎ"³Ë·¨"µÄ½ÇÉ«¡£²»¹ýÔÚʹÓÃÉϵÃСÐÄ£¬ËûµÄÇ°Ãæ±ØÐë¼ÓÉÏescape ×ÖÔª¡£


** ´Î·½ÔËËã
Á½¸öÐǺÅÔÚÔËËãʱ´ú±í "´Î·½" µÄÒâ˼¡£
let "sus=2**3"echo "sus = $sus" # sus = 8


$ Ç®ºÅ(dollar sign)
±äÁ¿Ìæ»»(Variable Substitution)µÄ´ú±í·ûºÅ¡£
vrs=123echo "vrs = $vrs" # vrs = 123
ÁíÍ⣬ÔÚ Regular Expressions Àï±»¶¨ÒåΪ "ÐÐ" µÄ×îÄ©¶Ë (end-of-line)¡£Õâ¸ö³£ÓÃÔÚgrep¡¢sed¡¢awk ÒÔ¼° vim(vi) µ±ÖС£


${} ±äÁ¿µÄÕý¹æ±í´ïʽ
bash ¶Ô ${} ¶¨ÒåÁ˲»ÉÙÓ÷¨¡£ÒÔÏÂÊÇÈ¡×ÔÏßÉÏ˵Ã÷µÄ±íÁÐ
${parameter:-word} ${parameter:=word} ${parameter:?word} ${parameter:+word} ${parameter:offset} ${parameter:offset:length} ${!prefix*} ${#parameter} ${parameter#word} ${parameter##word} ${parameter%word} ${parameter%%word} ${parameter/pattern/string} ${parameter//pattern/string}


$*
$* ÒýÓÃscriptµÄÖ´ÐÐÒýÓñäÁ¿£¬ÒýÓòÎÊýµÄËã·¨ÓëÒ»°ãÖ¸ÁîÏàͬ£¬Ö¸Áî±¾ÉíΪ0£¬ÆäºóΪ1£¬È»ºóÒÀ´ËÀàÍÆ¡£ÒýÓñäÁ¿µÄ´ú±í·½Ê½ÈçÏ£º
$0, $1, $2, $3, $4, $5, $6, $7, $8, $9, ${10}, ${11}.....
¸öλÊýµÄ£¬¿ÉÖ±½ÓʹÓÃÊý×Ö£¬µ«Á½Î»ÊýÒÔÉÏ£¬Ôò±ØÐëʹÓà {} ·ûºÅÀ´À¨×¡¡£
$* ÔòÊÇ´ú±íËùÓÐÒýÓñäÁ¿µÄ·ûºÅ¡£Ê¹ÓÃʱ£¬µÃÊÓÇé¿ö¼ÓÉÏË«ÒýºÅ¡£
echo "$*"
»¹ÓÐÒ»¸öÓë $* ¾ßÓÐÏàͬ×÷ÓõķûºÅ£¬µ«Ð§ÓÃÓë´¦Àí·½Ê½ÂÔΪ²»Í¬µÄ·ûºÅ¡£


$@
$@ Óë $* ¾ßÓÐÏàͬ×÷ÓõķûºÅ£¬²»¹ýËýÃÇÁ½ÕßÓÐÒ»¸ö²»Í¬µã¡£
·ûºÅ $* ½«ËùÓеÄÒýÓñäÁ¿ÊÓΪһ¸öÕûÌå¡£µ«·ûºÅ $@ ÔòÈԾɱ£Áôÿ¸öÒýÓñäÁ¿µÄÇø¶Î¹ÛÄî¡£

$#
ÕâÒ²ÊÇÓëÒýÓñäÁ¿Ïà¹ØµÄ·ûºÅ£¬ËýµÄ×÷ÓÃÊǸæËßÄ㣬ÒýÓñäÁ¿µÄ×ÜÊýÁ¿ÊǶàÉÙ¡£
echo "$#"


$? ״ֵ̬ (status variable)
Ò»°ãÀ´Ëµ£¬UNIX(linux) ϵͳµÄ½ø³ÌÒÔÖ´ÐÐϵͳµ÷ÓÃexit()À´½áÊøµÄ¡£Õâ¸ö»Ø´«Öµ¾ÍÊÇstatusÖµ¡£»Ø´«¸ø¸¸½ø³Ì£¬ÓÃÀ´¼ì²é×Ó½ø³ÌµÄÖ´ÐÐ״̬¡£
Ò»°ãÖ¸Áî³ÌÐòÌÈÈôÖ´Ðгɹ¦£¬Æä»Ø´«ÖµÎª 0£»Ê§°ÜΪ 1¡£
tar cvfz dfbackup.tar.gz /home/user > /dev/nullecho"$?"$$
ÓÉÓÚ½ø³ÌµÄIDÊÇΨһµÄ£¬ËùÒÔÔÚͬһ¸öʱ¼ä£¬²»¿ÉÄÜÓÐÖØ¸´Ð﵀ PID¡£ÓÐʱ£¬script»áÐèÒª²úÉúÁÙʱÎļþ£¬ÓÃÀ´´æ·Å±ØÒªµÄ×ÊÁÏ¡£¶ø´ËscriptÒàÓпÉÄÜÔÚͬһʱ¼ä±»Ê¹ÓÃÕßÃÇʹÓá£ÔÚÕâÖÖÇé¿öÏ£¬¹Ì¶¨ÎļþÃûÔÚд·¨ÉϾÍÏԵIJ»¿É¿¿¡£Î¨ÓвúÉú¶¯Ì¬ÎļþÃû£¬²ÅÄÜ·ûºÏÐèÒª¡£·ûºÅ$$»òÐí¿ÉÒÔ·ûºÏÕâÖÖÐèÇó¡£Ëü´ú±íµ±Ç°shell µÄ PID¡£
echo "$HOSTNAME, $USER, $MAIL" > ftmp.$$
ʹÓÃËüÀ´×÷ΪÎļþÃûµÄÒ»²¿·Ý£¬¿ÉÒÔ±ÜÃâÔÚͬһʱ¼ä£¬²úÉúÏàͬÎļþÃûµÄ¸²¸ÇÏÖÏó¡£
ps: »ù±¾ÉÏ£¬ÏµÍ³»á»ØÊÕÖ´ÐÐÍê±ÏµÄ PID£¬È»ºóÔÙ´ÎÒÀÐèÒª·ÖÅäʹÓá£ËùÒÔ script ¼´Ê¹ÁÙʱÎļþÊÇʹÓö¯Ì¬µµÃûµÄд·¨£¬Èç¹ûscript Ö´ÐÐÍê±ÏºóÈÔ²»¼ÓÒÔÇå³ý£¬»á²úÉúÆäËûÎÊÌâ¡£

( ) Ö¸ÁîȺ×é (command group)
ÓÃÀ¨ºÅ½«Ò»´®Á¬ÐøÖ¸ÁîÀ¨ÆðÀ´£¬ÕâÖÖÓ÷¨¶Ô shell À´Ëµ£¬³ÆÎªÖ¸ÁîȺ×é¡£ÈçÏÂÃæµÄÀý×Ó£º(cd ~ ; vcgh=`pwd` ;echo $vcgh)£¬Ö¸ÁîȺ×éÓÐÒ»¸öÌØÐÔ£¬shell»áÒÔ²úÉú subshellÀ´Ö´ÐÐÕâ×éÖ¸Áî¡£Òò´Ë£¬ÔÚÆäÖÐËù¶¨ÒåµÄ±äÊý£¬½ö×÷ÓÃÓÚÖ¸ÁîȺ×é±¾Éí¡£ÎÒÃÇÀ´¿´¸öÀý×Ó
# cat ftmp-01#!/bin/basha=fsh(a=incg ; echo -e "\n $a \n")echo $a#./ftmp-01incgfsh
³ýÁËÉÏÊöµÄÖ¸ÁîȺ×飬À¨ºÅÒ²ÓÃÔÚ array ±äÊýµÄ¶¨ÒåÉÏ£»ÁíÍâÒ²Ó¦ÓÃÔÚÆäËû¿ÉÄÜÐèÒª¼ÓÉÏescape×ÖÔª²ÅÄÜʹÓõij¡ºÏ£¬ÈçÔËËãʽ¡£


(( ))
Õâ×é·ûºÅµÄ×÷ÓÃÓë let Ö¸ÁîÏàËÆ£¬ÓÃÔÚËãÊýÔËËãÉÏ£¬ÊÇ bash µÄÄÚ½¨¹¦ÄÜ¡£ËùÒÔ£¬ÔÚÖ´ÐÐЧÂÊÉÏ»á±ÈʹÓà letÖ¸ÁîÒªºÃÐí¶à¡£
#!/bin/bash(( a = 10 ))echo -e "inital value, a = $a\n"(( a++))echo "after a++, a = $a"

{ } ´óÀ¨ºÅ (Block of code)
ÓÐʱºò script µ±Öлá³öÏÖ£¬´óÀ¨ºÅÖлá¼Ð×ÅÒ»¶Î»ò¼¸¶ÎÒÔ"·ÖºÅ"×ö½áβµÄÖ¸Áî»ò±äÊýÉ趨¡£
# cat ftmp-02#!/bin/basha=fsh{a=inbc ; echo -e "\n $a \n"}echo $a#./ftmp-02inbcinbc
ÕâÖÖÓ÷¨ÓëÉÏÃæ½éÉܵÄÖ¸ÁîȺ×é·Ç³£ÏàËÆ£¬µ«Óиö²»Í¬µã£¬ËüÔÚµ±Ç°µÄ shell Ö´ÐУ¬²»»á²úÉú subshell¡£
´óÀ¨ºÅÒ²±»ÔËÓÃÔÚ "º¯Êý" µÄ¹¦ÄÜÉÏ¡£¹ãÒåµØËµ£¬µ¥´¿Ö»Ê¹ÓôóÀ¨ºÅʱ£¬×÷ÓþÍÏñÊǸöûÓÐÖ¸¶¨Ãû³ÆµÄº¯ÊýÒ»°ã¡£Òò´Ë£¬ÕâÑùд scriptÒ²ÊÇÏ൱ºÃµÄÒ»¼þÊ¡£ÓÈÆä¶ÔÊä³öÊäÈëµÄÖØµ¼ÏòÉÏ£¬Õâ¸ö×ö·¨¿É¾«¼ò script µÄ¸´ÔÓ¶È¡£

´ËÍ⣬´óÀ¨ºÅ»¹ÓÐÁíÒ»ÖÖÓ÷¨£¬ÈçÏÂ
{xx,yy,zz,...}
ÕâÖÖ´óÀ¨ºÅµÄ×éºÏ£¬³£ÓÃÔÚ×Ö´®µÄ×éºÏÉÏ£¬À´¿´¸öÀý×Ó
mkdir {userA,userB,userC}-{home,bin,data}
ÎÒÃǵõ½ userA-home, userA-bin, userA-data, userB-home, userB-bin,userB-data, userC-home, userC-bin,userC-data£¬Õ⼸¸öĿ¼¡£Õâ×é·ûºÅÔÚÊÊÓÃÐÔÉÏÏ൱¹ã·º¡£ÄܼÓÒÔÉÆÓõϰ£¬»Ø±¨ÊǾ«¼òÓëЧÂÊ¡£ÏñÏÂÃæµÄÀý×Ó
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
Èç¹û²»ÊÇÒòΪ֧ԮÕâÖÖÓ÷¨£¬ÎÒÃǵÃд¼¸ÐÐÖØ¸´¼¸´Îѽ£¡


[ ] ÖÐÀ¨ºÅ
³£³öÏÖÔÚÁ÷³Ì¿ØÖÆÖУ¬°çÑÝÀ¨×¡ÅжÏʽµÄ×÷Óá£if [ "$?" != 0 ]thenecho "Executes error"exit1fi
Õâ¸ö·ûºÅÔÚÕýÔò±í´ïʽÖе£ÈÎÀàËÆ "·¶Î§" »ò "¼¯ºÏ" µÄ½ÇÉ«
rm -r 200[1234]
ÉÏÀý£¬´ú±íɾ³ý 2001, 2002, 2003, 2004 µÈĿ¼µÄÒâ˼¡£


[[ ]]
Õâ×é·ûºÅÓëÏÈǰµÄ [] ·ûºÅ£¬»ù±¾ÉÏ×÷ÓÃÏàͬ£¬µ«ËýÔÊÐíÔÚÆäÖÐÖ±½ÓʹÓà || Óë&& Âß¼­µÈ·ûºÅ¡£
#!/bin/bashread akif [[ $ak > 5 || $ak< 9 ]]thenecho $akfi


|| Âß¼­·ûºÅ
Õâ¸ö»áʱ³£¿´µ½£¬´ú±í or Âß¼­µÄ·ûºÅ¡£


&& Âß¼­·ûºÅ
Õâ¸öÒ²»á³£¿´µ½£¬´ú±í and Âß¼­µÄ·ûºÅ¡£


& ºǫ́¹¤×÷
µ¥Ò»¸ö& ·ûºÅ£¬ÇÒ·ÅÔÚÍêÕûÖ¸ÁîÁеÄ×îºó¶Ë£¬¼´±íʾ½«¸ÃÖ¸ÁîÁзÅÈëºǫ́Öй¤×÷¡£
tar cvfz data.tar.gz data > /dev/null&

\<...\> µ¥×ֱ߽ç
Õâ×é·ûºÅÔÚ¹æÔò±í´ïʽÖУ¬±»¶¨ÒåΪ"±ß½ç"µÄÒâ˼¡£Æ©È磬µ±ÎÒÃÇÏëÕÒѰ the Õâ¸öµ¥×Öʱ£¬Èç¹ûÎÒÃÇÓÃ
grep the FileA
Ä㽫»á·¢ÏÖ£¬Ïñ there ÕâÀàµÄµ¥×Ö£¬Ò²»á±»µ±³ÉÊÇÆ¥ÅäµÄµ¥×Ö¡£ÒòΪ the ÕýÇÉÊÇ thereµÄÒ»²¿·Ý¡£Èç¹ûÎÒÃÇÒª±ØÃâÕâÖÖÇé¿ö£¬¾ÍµÃ¼ÓÉÏ "±ß½ç" µÄ·ûºÅ
grep '\' FileA


+ ¼ÓºÅ (plus)
ÔÚÔËËãʽÖУ¬ËýÓÃÀ´±íʾ "¼Ó·¨"¡£
expr 1 + 2 + 3
´ËÍâÔÚ¹æÔò±í´ïʽÖУ¬ÓÃÀ´±íʾ"ºÜ¶à¸ö"µÄÇ°Ãæ×ÖÔªµÄÒâ˼¡£
# grep '10\+9' fileB109100910000910000931010009#Õâ¸ö·ûºÅÔÚʹÓÃʱ£¬Ç°Ãæ±ØÐë¼ÓÉÏescape ×ÖÔª¡£


- ¼õºÅ (dash)
ÔÚÔËËãʽÖУ¬ËýÓÃÀ´±íʾ "¼õ·¨"¡£
expr 10 - 2
´ËÍâÒ²ÊÇϵͳָÁîµÄÑ¡Ïî·ûºÅ¡£
ls -expr 10 - 2
ÔÚ GNU Ö¸ÁîÖУ¬Èç¹ûµ¥¶ÀʹÓà - ·ûºÅ£¬²»¼ÓÈκθüӵÄÎļþÃû³ÆÊ±£¬´ú±í"±ê×¼ÊäÈë"µÄÒâ˼¡£ÕâÊÇ GNUÖ¸ÁîµÄ¹²Í¨Ñ¡ÏƩÈçÏÂÀý
tar xpvf -
ÕâÀïµÄ - ·ûºÅ£¬¼È´ú±í´Ó±ê×¼ÊäÈë¶ÁÈ¡×ÊÁÏ¡£
²»¹ý£¬ÔÚ cd Ö¸ÁîÖÐÔò±È½ÏÌØ±ð
cd -
Õâ´ú±í±ä¸ü¹¤×÷Ŀ¼µ½"ÉÏÒ»´Î"¹¤×÷Ŀ¼¡£


% ³ý·¨ (Modulo)
ÔÚÔËËãʽÖУ¬ÓÃÀ´±íʾ "³ý·¨"¡£
expr 10 % 2
´ËÍ⣬Ҳ±»ÔËÓÃÔÚ¹ØÓÚ±äÁ¿µÄ¹æÔò±í´ïʽµ±ÖеÄÏÂÁÐ
${parameter%word}${parameter%%word}
Ò»¸ö % ±íʾ×î¶ÌµÄ word Æ¥Å䣬Á½¸ö±íʾ×µÄ word Æ¥Åä¡£


= µÈºÅ (Equals)
³£ÔÚÉ趨±äÊýʱ¿´µ½µÄ·ûºÅ¡£
vara=123echo " vara = $vara"
»òÕßÏñÊÇ PATH µÄÉ趨£¬ÉõÖÁÓ¦ÓÃÔÚÔËËã»òÅжÏʽµÈ´ËÀàÓÃ;ÉÏ¡£


== µÈºÅ (Equals)
³£ÔÚÌõ¼þÅжÏʽÖп´µ½£¬´ú±í "µÈÓÚ" µÄÒâ˼¡£
if [ $vara == $varb ]
...ÏÂÂÔ

!= ²»µÈÓÚ
³£ÔÚÌõ¼þÅжÏʽÖп´µ½£¬´ú±í "²»µÈÓÚ" µÄÒâ˼¡£
if [ $vara != $varb ]
...ÏÂÂÔ


^
Õâ¸ö·ûºÅÔÚ¹æÔò±í´ïʽÖУ¬´ú±íÐÐµÄ "¿ªÍ·" λÖã¬ÔÚ[]ÖÐÒ²Óë"!"(̾ºÅ)Ò»Ñù±íʾ¡°·Ç¡±


Êä³ö/ÊäÈëÖØµ¼Ïò
> >> < << :> &> 2&> 2<>>& >&2

ÎļþÃèÊö·û(File Descriptor)£¬ÓÃÒ»¸öÊý×Ö£¨Í¨³£Îª0-9£©À´±íʾһ¸öÎļþ¡£
³£ÓõÄÎļþÃèÊö·ûÈçÏ£º
ÎļþÃèÊö·û Ãû³Æ ³£ÓÃËõд ĬÈÏÖµ
0 ±ê×¼ÊäÈë stdin ¼üÅÌ
1 ±ê×¼Êä³ö stdout ÆÁÄ»
2 ±ê×¼´íÎóÊä³ö stderr ÆÁÄ»
ÎÒÃÇÔÚ¼òµ¥µØÓÃ<»ò>ʱ£¬Ï൱ÓÚʹÓà 0< »ò 1>£¨ÏÂÃæ»áÏêϸ½éÉÜ£©¡£
* cmd > file
°ÑcmdÃüÁîµÄÊä³öÖØ¶¨Ïòµ½ÎļþfileÖС£Èç¹ûfileÒѾ­´æÔÚ£¬ÔòÇå¿ÕÔ­ÓÐÎļþ£¬Ê¹ÓÃbashµÄnoclobberÑ¡Ïî¿ÉÒÔ·ÀÖ¹¸´¸ÇÔ­ÓÐÎļþ¡£
* cmd >> file
°ÑcmdÃüÁîµÄÊä³öÖØ¶¨Ïòµ½ÎļþfileÖУ¬Èç¹ûfileÒѾ­´æÔÚ£¬Ôò°ÑÐÅÏ¢¼ÓÔÚÔ­ÓÐÎļþááÃæ¡£
* cmd < file
ʹcmdÃüÁî´Ófile¶ÁÈë
* cmd << text
´ÓÃüÁîÐжÁÈ¡ÊäÈ룬ֱµ½Ò»¸öÓëtextÏàͬµÄÐнáÊø¡£³ý·ÇʹÓÃÒýºÅ°ÑÊäÈëÀ¨ÆðÀ´£¬´Ëģʽ½«¶ÔÊäÈëÄÚÈݽøÐÐshell±äÁ¿Ìæ»»¡£Èç¹ûʹÓÃ<<- £¬Ôò»áºöÂÔ½ÓÏÂÀ´ÊäÈëÐÐÊ×µÄtab£¬½áÊøÐÐÒ²¿ÉÒÔÊÇÒ»¶ÑtabÔÙ¼ÓÉÏÒ»¸öÓëtextÏàͬµÄÄÚÈÝ£¬¿ÉÒԲο¼ááÃæµÄÀý×Ó¡£
* cmd <<< word
°Ñword£¨¶ø²»ÊÇÎļþword£©ºÍááÃæµÄ»»ÐÐ×÷ΪÊäÈëÌṩ¸øcmd¡£
* cmd <> file
ÒÔ¶Áдģʽ°ÑÎļþfileÖØ¶¨Ïòµ½ÊäÈ룬Îļþfile²»»á±»ÆÆ»µ¡£½öµ±Ó¦ÓóÌÐòÀûÓÃÁËÕâÒ»ÌØÐÔʱ£¬Ëü²ÅÊÇÓÐÒâÒåµÄ¡£
* cmd >| file
¹¦ÄÜͬ>£¬µ«¼´±ãÔÚÉèÖÃÁËnoclobberʱҲ»á¸´¸ÇfileÎļþ£¬×¢ÒâÓõÄÊÇ|¶ø·ÇһЩÊéÖÐ˵µÄ!£¬Ä¿Ç°½öÔÚcshÖÐÈÔÑØÓÃ>!ʵÏÖÕâÒ»¹¦ÄÜ¡£
: > filename °ÑÎļþ"filename"½Ø¶ÏΪ0³¤¶È.# Èç¹ûÎļþ²»´æÔÚ, ÄÇô¾Í´´½¨Ò»¸ö0³¤¶ÈµÄÎļþ(Óë'touch'µÄЧ¹ûÏàͬ).
cmd >&n °ÑÊä³öË͵½ÎļþÃèÊö·ûn
cmd m>&n °ÑÊä³öµ½Îļþ·ûmµÄÐÅÏ¢ÖØ¶¨Ïòµ½ÎļþÃèÊö·ûn
cmd >&- ¹Ø±Õ±ê×¼Êä³ö
cmd <&n ÊäÈëÀ´×ÔÎļþÃèÊö·ûn
cmd m<&n mÀ´×ÔÎļþÃèÊö¸÷¸ön
cmd <&- ¹Ø±Õ±ê×¼ÊäÈë
cmd <&n- ÒÆ¶¯ÊäÈëÎļþÃèÊö·ûn¶ø·Ç¸´ÖÆËü¡£
cmd >&n- ÒÆ¶¯Êä³öÎļþÃèÊö·û n¶ø·Ç¸´ÖÆËü¡£
×¢Ò⣺ >&ʵ¼ÊÉϸ´ÖÆÁËÎļþÃèÊö·û£¬ÕâʹµÃcmd > file 2>&1Óëcmd 2>&1 >fileµÄЧ¹û²»Ò»Ñù¡£

À´Ô´£ºLinuxÉçÇø
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ