Subject : UNIX C-SHELL PROGRAMMING ±â¹ý(2) Description : CONTENTS: 1. C-SHEELÀ̶õ 2. UNIX SHEELÀÇ ÁÖ¿ä Ư¼º 3. C-SHEELÀÇ ¿ëµµ 4. SHELLÀÇ Á¾·ù 5. SHELL ¸í·É¾î¿Í ¸í·É¾î FILE 6. SHELL SCRIPTÀÛ¼º½Ã ÁÖÀÇ »çÇ× 7. SHELL SCRIPTÀÇ ¼öÇà 8. shell script º¯¼ö 9. temporary fileÀÇ »ç¿ë 10. shell script Á¦¾î¹® 11. ¹Ýº¹ Á¦¾î¹®ÀÇ Á¾·ù 12. Àμö list ó¸® 13. ȯ°æ º¯¼öÀÇ »ç¿ë(º¯¼ö¸íÀº ´ë¹®ÀÚ) 14. ±âÁ¤ º¯¼öÀÇ »ç¿ë (setÀ¸·Î ³»¿ë °Ë»ö) 15. shell º¯¼öÀÇ Æ¯¼º 16. ¹®ÀÚ single(') ¿Í double(") ¿Í backword apostroples(') »çÀÌÀÇ Â÷ÀÌÁ¡ 17. shell º¯¼ö¸¦ »ç¿ëÇÑ »ê¼ú ¿¬»ê 18. shell scriptÀÇ debugging 19. ¸í·É¾îÀÇ ´ëü 20. ¸í·É¾î Áý´ÜÈ¿¡ À¯¿ëÇÑ ¹®ÀÚ¹× ¸í·É 21. BACKGROUND »óÅ¿¡¼ PROCESS¼öÇà 22. »ç¿ëÀÚ processÀÇ ½ÇÇà ¼øÀ§ÀÇ Á¶Á¤ 23. ¼öÇàÁßÀÎ processÀÇ Á¤Áö¿Í Àç ¼öÇà 24. C-SHELL¸¦ ÀÌ¿ëÇÑ PROGRAM ¿¹ 25.ÀϹÝÀûÀÎ UNIX ¸í·Éµé DESCRIPTION: 9. temporary fileÀÇ »ç¿ë ÇöÀç »ç¿ë directory¿¡ Àӽà fileÀ» ÀÛ¼º Çϴ°ÍÀº ¸Å¿ì ¾ÈÀüÇÏÁö¸¸ ´ÙÀ½°ú °°Àº ÀÌÀ¯·Î ÇÇÇÏ´Â°Í ÀÌ ÁÁ´Ù. (1) ÇöÀçÀÇ directory ¿¡ TEMP¶ó´Â fileÀÌ ÀÌ¹Ì Á¸ÀçÇÒ °æ¿ì shell script¸¦ ¼öÇà ½ÃÅ°¸é temp fileÀÌ »õ·Î¿î file·Î ´ëüµÇ¾î ¿øÇÏÁö ¾Ê´Â ºÎÀÛ¿ëÀÌ »ý±æ¼ö ÀÖ´Ù. (2) ÇÑ »ç¿ëÀÚ°¡ ÀÛ¼ºÇÑ ¸í·É shell fileÀ» ´Ù¸¥ »ç¿ëÀÚ°¡ °øÀ¯ÇÏ·Á´Â °æ¿ì ¸í·ÉÀ» ¼öÇàÇÑ °á°ú »ý¼ºµÇ´Â Àӽà fileÀÌ ´Ù¸¥ »ç¿ëÀÚ¿¡°Ô »ç¿ëµÉ¼ö ÀÖ´ÂÁö´Â È®½Ç ÇÏÁö ¾Ê´Ù. ¤·´ëü ¹æ¾È (1) Àӽà file¸¸À» ÀúÀåÇÏ´Â directory¿¡ shell script file°ú ¼öÇàµÇ´Â PID¹øÈ£¸¦ ¿¬°áÇÑ À̸§À¸·Î ÀúÀåÇÏ°Ô ÇÑ´Ù. 10. shell script Á¦¾î¹® (1) Á¶°Ç¹®ÀÇ »ç¿ë ¸í·ÉÀ» ¿¬¼ÓÀ¸·Î ¼öÇàÇÏÁö ¾Ê°í Á¶°ÇÀ» ºÎ¿© ¼öÇà ¼ø¼¸¦ º¯°æÇÏ°íÀÚ ÇÒ¶§ »ç¿ë korn shellÀÇ °æ¿ì if <Á¶°ÇÀ̳ª ¸í·É Ç¥Çö½Ä> ; then ÂüÀÎ °æ¿ì - ¸í·É ¼öÇà : : else °ÅÁþÀÎ °æ¿ì - ¸í·É ¼öÇà : : fi c-shellÀÇ °æ¿ì if {<Á¶°Ç½Ä/¸í·É Ç¥Çö½Ä>} then ÂüÀÎ °æ¿ì - ¸í·É ¼öÇà : : else °ÅÁþÀÎ °æ¿ì - ¸í·É ¼öÇà : : endif ¤·ÁÖÀÇ »çÇ× ¨ç thenÀÇ À§Ä¡ korn shell : if ¸í·É°ú ´Ù¸¥ line, Áï ´ÙÀ½ line c-shell : if¿Í °°Àº line»ó¿¡ ¸í·É ¨è c-shell¿¡¼´Â <Á¶°Ç½Ä/¸í·É Ç¥Çö½Ä>Àº { }¿¡ Ç¥Çö ¨é <Á¶°Ç½Ä/¸í·É Ç¥Çö½Ä>ÀÇ °ÅÁþ¿¡ ´ëÇÑ Ã³¸®°¡ ÇÊ¿äÄ¡ ¾ÊÀº elseÀÌÇÏ´Â »ý·« ¨ê ¸í·É Ç¥Çö½ÄÀÇ Âü/°ÅÁþÀÇ ¸í·É¾î Á¾·á »óÅ º¯¼ö¿¡ °ªÀ» ÇÒ´çÇÑ´Ù. Á¤»óÀûÀÎ °æ¿ì º¯¼ö °ªÀº 0(zero)°¡ ÀúÀåµÇ¸ç ½ÇÆÐÀÎ °æ¿ì ´Ù¸¥ °ªÀÌ ÀúÀåµÇ¸ç ¾Æ·¡ÀÇ °ª¿¡ ÀÇÇØ °áÁ¤µÈ´Ù. korn shellÀÇ °æ¿ì : $status c-shellÀÇ °æ¿ì : $? ¤·Á¶°Ç ´ë»ó ¨ç ¸í·É¾î°¡ Á¶°Ç ºñ±³ ÆÇ´Ü ¨è º¯¼ö¿¡ ÀúÀåµÈ °ª°ú ¼ýÀÚÀÇ ºñ±³ ÆÇ´Ü - »ê¼ú ¿¬»êÀÚ »ç¿ë ¨é º¯¼ö¿¡ ÀúÀåµÈ ¹®ÀÚ¿°úÀÇ ºñ±³ ÆÇ´Ü ¨ê fileÀÇ Á¾·ù ºñ±³ ÆÇ´Ü ¨ë fileÀ̳ª º¯¼öÀÇ ÇüŸ¦ ºñ±³ ÆÇ´Ü ¤· ¹®ÀÚ¿ ºñ±³ ¿¬»êÀÚ Ç¥Çö½Ä ¼³ ¸í <¹®ÀÚ¿1> == <¹®ÀÚ¿2> µÎ¹®ÀÚ¿ÀÌ °°À¸¸é Âü <¹®ÀÚ¿1> != <¹®ÀÚ¿2> µÎ¹®ÀÚ¿ÀÌ ´Ù¸£¸é Âü <¹®ÀÚ¿1> =~ <¹®ÀÚ¿2> <¹®ÀÚ¿1>°ú<¹®ÀÚ¿2>¿¡ ÁöÁ¤ÇÑ ÆÐÅÏÀÌ ÀÏÄ¡ Çϸé Âü <¹®ÀÚ¿1> !~ <¹®ÀÚ¿2> <¹®ÀÚ¿1>°ú<¹®ÀÚ¿2>¿¡ ÁöÁ¤ÇÑ ÆÐÅÏÀÌ ÀÏÄ¡ ÇÏÁö ¾ÊÀ¸¸é Âü ¤·fileÀÇ Á¢±Ù±ÇÇÑ, Á¸ÀçÀ¯¹«, Á¾·ù ºñ±³ Á¶°Ç Á¶ °Ç ¼³ ¸í -rÁ¢±Ù±ÇÇÑ Àбâ(r)·Î ¼³Á¤ µÇ¸é Âü -w Á¢±Ù±ÇÇÑ ¾²±â(w)·Î ¼³Á¤ µÇ¸é Âü -x Á¢±Ù±ÇÇÑ ½ÇÇà(x)·Î ¼³Á¤ µÇ¸é Âü -e Á¸ÀçÇϸé Âü -o ¼ÒÀ¯ÀÚ°¡ ¸í·É ½ÇÇàÀÚ¸é Âü -O ¼ÒÀ¯ÀÚ°¡ ¸í·É ½ÇÇàÀÚ¸é Âü -z ÁöÁ¤ÇÑ fileÀÇ ³»¿ëÀÌ ¾øÀ¸¸é Âü, Áï file size 0(zero)¸é Âü -f directory °¡ ¾Æ´Ï¸é Âü -d directory À̸é Âü ¤·»ê¼ú ¿¬»êÀÚ ¿¬»êÀÚ ¼³ ¸í + µ¡¼À - »¬¼À * °ö¼À / ³ª´¼À % ³ª´¼ÀÀÇ Á¤¼ö ³ª¸ÓÁö ^ ½Â¼ö ¤·³í¸® ¿¬»êÀÚ ¿¬»êÀÚ Ç¥ Çö ÀÚ ¼³ ¸í NOT ! <Ç¥Çö½Ä> <Ç¥Çö½Ä>ÀÌ ÂüÀÌ¸é °ÅÁþ OR <Ç¥Çö½Ä1>||<Ç¥Çö½Ä2> Ç¥Çö½Ä 1,2Áß Çϳª°¡ ÂüÀ̸é Âü AND <Ç¥Çö½Ä1>&&<Ç¥Çö½Ä2> Ç¥Çö½Ä 1,2°¡ ¸ðµÎ ÂüÀ϶§ Âü (2)Áßø if¹® if ~ else ~ endif¹® ³»¿¡ if ~ else ~ endif¹®ÀÌ ÀÖ´Â °æ¿ì (3) ¹Ýº¹ (LOOPING) 11. ¹Ýº¹ Á¦¾î¹®ÀÇ Á¾·ù (1) interative ¹Ýº¹¹® ÁöÁ¤µÈ ¼ýÀÚ¸¸Å ¹Ýº¹ÇÏ¿© ¼öÇà korn shellÀÇ °æ¿ì for <Á¦¾îº¯¼ö> in (<Ç׸ñÀÇ list>) do <¸í·É¹®> done c-shellÀÇ °æ¿ì foreach<Á¦¾îº¯¼ö> (<Ç׸ñ list>) <¸í·É¹®> end * ¹®Àå³»¿¡ Ç׸ñ list¸¦ ±â¼úÇϱ⠺¸´Ù´Â ¸í·É¾î Àμö list·Î ´ëüÇϴ°ÍÀÌ ÀϹÝÀûÀÌ´Ù. ¤·Ç׸ñ list¸¦ ¸í·É¾îÀÇ list·Î ´ëü °æ¿ì korn shellÀÇ °æ¿ì c-shellÀÇ °æ¿ì for <¹Ýº¹ Ƚ¼ö> in $@ foreach <¹Ýº¹È½¼ö> in ($argv[*]) (2) conditional ¹Ýº¹¹® Á¶°ÇÀÌ ¸¸Á·ÇÏ¸é °è¼Ó ¼öÇà ¸¸Á·ÇÏÁö ¾ÊÀ¸¸é Á¤Áö korn shellÀÇ °æ¿ì while<Á¶°Ç> do <¸í·É¾îµé> done c-shellÀÇ °æ¿ì while (<Á¶°Ç>) do <¸í·É¾îµé> end * <Á¶°Ç>Àº if ~ else ~ endif¹®¿¡¼ »ç¿ëÇß´ø Á¶°Ç Ç¥Çö½Ä°ú °°´Ù. ¤·ÁÖÀÇ »çÇ× ¨ç <Á¶°Ç>ÀÌ ÂüÀ̸é ÀÏ·ÃÀÇ ¸í·ÉÀ» ¼öÇàÇÑÈÄ ´Ù½Ã <Á¶°Ç> Á¶»ç ¨è <Á¶°Ç>ÀÌ ÂüÀÌ¸é ¸í·É ¼öÇà, °ÅÁþÀÌ¸é ¹Ýº¹¹®À» ³¡³½´Ù. ¨é <Á¶°Ç>ÀÌ Âü¸¸ ÀÖÀ¸¸é ¹«ÇÑ loop󸮷Πprogram ¿À·ù ¹ß»ý ¨ê ¹«ÇÑ loop·Î ÆǴܵǸé Ctrl+C·Î Á¤Áö ¨ë ¹«ÇÑ loopÀÇ ¹Ýº¹ ¿øÀÎÀ» ã¾Æ ¼öÁ¤ set noglob : ÀԷµǴ ¹®ÀÚ ?°¡ if¹®¿¡¼ÀÇ ÆÐÅÏ »ç¿ë ¹®ÀÚ·Î »ç¿ëµÇ´Â°ÍÀ» ¹æÁöÇÑ´Ù. 12. Àμö list ó¸® $# - positional parameter ¶ó°í ºÎ¸£¸ç, ÀμöÀÇ °¹¼ö¸¦ ÀúÀåÇϸç, °ø¹é¿¡ ÀÇÇØ ºÐ¸®µÇ¾î À§Ä¡¸¦ ³ª´«´Ù. º¸Åë $1 ~ $9±îÁöÀÇ º¯¼ö¸¦ »ç¿ëÇÏ¸ç ±×ÀÌ»óÀ϶§´Â { }¸¦ »ç¿ëÇÏ¿© Ç¥½ÃÇÑ´Ù. 13. ȯ°æ º¯¼öÀÇ »ç¿ë(º¯¼ö¸íÀº ´ë¹®ÀÚ) ¨ç ÀÌ¹Ì Á¤ÀÇµÇ¾î »ç¿ëÀÚ°¡ À̸§À» ¸¸µéÁö ¾Ê¾Æµµ system¿¡¼ ÀÚµ¿ÀûÀ¸·Î º¯¼ö¿¡ °ªÀ» ÀúÀåÇϰųª »ç¿ëÀÚ°¡ ÇÊ¿ä·Î ÇÒ¶§ ÀÌ¿ë ÇÒ ¼ö ÀÖ´Ù. ¨è »ç¿ëÀÚ È¯°æ¿¡¼ Á¦¾î µÈ´Ù. ¤·È¯°æ º¯¼ö¿¡ ´ëÇÑ ¼³¸í (env¸í·ÉÀ¸·Î ³»¿ë °Ë»ö) º¯¼ö¸í ¼³ ¸í TERM TERMINAL À¯ÇüÀ» Á¤ÀÇÇÏ´Â CODE·Î ¼³Á¤ HOME »ç¿ëÀÚÀÇ HOME DIRECTORYÁ¤ÀÇ, Àý´ë °æ·Î¸íÀ» °¡Áø´Ù. PATH ¸í·É¾î °Ë»ö °æ·Î USER ¸ðµç »ç¿ëÀÚÀÇ LOGIN¸íÀ» °¡Áø´Ù. SHELL »ç¿ëÀÚÀÇ LOGIN SHELL, Àý´ë °æ·Î¸íÀ» °¡Áø´Ù. MAIL »ç¿ëÀÚÀÇ ¿ìÆí¹°À» ÀúÀåÇÏ´Â DIRECTORY·Î °æ·Î¸íÀ» °¡Áø´Ù. EXINT ex, viÆíÁý±â¿¡ »ç¿ëÇÏ´Â OPTIONµéÀ» ÃʱâÈÇÑ´Ù.(40°³) TERMCAP °³ÀÎ DATA BASE¸¦ »ç¿ëÇϵµ·Ï ÇÑ´Ù. (DEFAULT´Â etc/termcap) TTYLINE TERMONAL DEVICE PROGRAMÀ» »ç¿ëÇÒ¼ö ÀÖµµ·Ï ÇϱâÀ§Çؼ ¼±¾ð 14. ±âÁ¤ º¯¼öÀÇ »ç¿ë (setÀ¸·Î ³»¿ë °Ë»ö) set º¯¼ö = ¹®ÀÚ¿ ±âÁ¤ º¯¼ö¸í ¼³ ¸í path ¸í·É¾î °Ë»ö °æ·Î directory¸íÀÇ list¸¦ °¡Áø´Ù. cdpath unix °èÃþÀû file systemÀÇ Æ¯¼ºÀ» »ì·Á ÀÛ¾÷¿µ¿ªÀ» µ¶¸³µÈ directory·Î ±¸ºÐ ÇÒ¶§ »ç¿ë, Àý´ë °æ·Î¸íÀÇ ´Ü¾îlist home HOME DIR.ÀÇ Àý´ë °æ·Î¸íÀ» Æ÷ÇÔÇÏ°í ÀÖ´Ù. LOGIN PROGRAMÀ¸·Î ºÎÅÍ ¹ÞÀº °ªÀ¸·Î ÃʱâÈ ÇÑ´Ù. shell default c-shellÀº shellÀ» /bin/csh·Î ÃʱâÈ ´ë°³ÀÇ °æ¿ì´Â ¹Ù²ÙÁö ¾Ê´Â°ÍÀÌ ÁÁ´Ù. mail MAIL BOX°¡ Àִ°÷ ¼³Á¤, set mail = (60 /usr/sara) history history¿¡ ÀúÀåµÈ ¸í·ÉÀÇ °¹¼ö Á¤ÀÇ histchars history¸í·ÉÀ» ¼öÇà½ÃÅ°´Âµ¥ »ç¿ëÇϱ⸦ ¿øÇÏ´Â ¼ö°³ÀÇ ¹®ÀÚ ·Î ¼³Á¤, .cshrc file³»¿¡¼ Á¤ÀÇ ÇÒ¼ö ÀÖ´Ù. savehist login session°£ÀÇ history list¸¦ ¿¬°áÇÏ°í ½ÍÀ»¶§ »ç¿ë prompt prompt Á¤ÀÇ, »ç°Ç¹øÈ£¸¦ º¸À̱â À§ÇØ history ¹®ÀÚ ! ¸¦ Æ÷ÇÔ ½Ãų¼ö ÀÖ´Ù. ignoreeof ½Ç¼ö·Î Ctrl+D¸¦ typingÇßÀ»¶§ logout¹æÁö noclobber Ãâ·Â ¹æÁö Àüȯ½Ã ÀÌ¿¡ Á¸ÀçÇÏ´Â file¿¡ °ãÃÄ ¾²´Â°ÍÀ» ¹æÁö time ÁÖ¾îÁø ½Ã°£ ÀÌ»óÀÇ CPU½Ã°£À» ¼Ò¿äÇÏ´Â ¸ðµç ¸í·É¿¡ ´ëÇØ Áö¿ø »ç¿ë Åë°èÄ¡¸¦ º¸¿© ÁØ´Ù. cwd »ç¿ëÀÚÀÇ ÇöÀç »ç¿ë directory 15. shell º¯¼öÀÇ Æ¯¼º ¨ç shell script¿¡¼ Á¤ÀÇµÇ¾î »ý¼ºµÈ º¯¼ö´Â shell script°¡ ¼öÇàµÇ´Â µ¿¾È¸¸ Á¸ÀçÇϹǷΠ¸í·É¾î ÀÔ·Â line¿¡¼ ´ëȽÄÀ¸·Î ÂüÁ¶Çϰųª ´Ù¸¥ shell script¿¡¼ »ç¿ëÇÒ ¼ö ¾ø´Ù. ¨è terminal¿¡¼ keyboard ÀÔ·ÂÀ¸·Î º¯¼ö¸¦ ¼³Á¤ÇÑ °æ¿ì shell script³»¿¡¼ ´ëȽÄÀ¸·Î »ç¿ëÇÑ º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ¾ø°Ô µÈ´Ù. ¨é Áö¿ª º¯¼ö´Ù. 1)º¯¼ö°ª °øÀ¯ korn shellÀÇ °æ¿ì c-shell ÀÇ °æ¿ì typeset <º¯¼ö¸í> = <ÇÒ´çÇÒ °ª> setenv <º¯¼ö¸í> <ÇÒ´ç°ª> export <º¯¼ö¸í> export <º¯¼ö¸í> = <ÇÒ´ç°ª> export ¸í·É : shell script¿Í ¸í·É ÀÔ·Â line¿¡¼ °øÀ¯ÇÏ¿© »ç¿ë * »óÀ§ shell¿¡¼ °øÀ¯ÇÑ º¯¼ö´Â ÇÏÀ§ shell¿¡¼ ÂüÁ¶ °¡´É ÇÏÁö¸¸ ÇÏÀ§ shell¿¡¼ °øÀ¯ÇÑ º¯¼ö´Â »óÀ§ shell¿¡¼ ÂüÁ¶ ÇÒ¼ö ¾ø´Ù. 16. ¹®ÀÚ single(') ¿Í double(") ¿Í backword apostroples(') »çÀÌÀÇ Â÷ÀÌÁ¡ Ç¥½Ä ¹®ÀÚ ¼³ ¸í ' ¹«Á¶°Ç ¹®ÀÚ¿ Çؼ®ÇÏ¿© Ãâ·Â º¯¼ö,¸í·É¾î,¹®ÀÚ ÆÐÅÏ ¸ðµÎ ÀÎ½Ä ÇÏÁö ¸øÇÔ " ¸í·É¾î¿Í º¯¼ö¸¦ Çؼ®ÇÏ¿© ¹®ÀÚ¿°ú Ãâ·Â ¸í·É¾î '<¼öÇà ¸í·É¾î>' º¯¼ö´Â $<º¯¼ö¸í> Çü½ÄÀ¸·Î »ç¿ë ` ¸í·É¾î³ª º¯¼ö·Î Çؼ® 17. shell º¯¼ö¸¦ »ç¿ëÇÑ »ê¼ú ¿¬»ê korn shellÀÇ °æ¿ì ((<º¯¼ö> = <º¯¼ö³ª°ª> <»ê¼ú¿¬»êÀÚ><º¯¼ö³ª°ª> let <º¯¼ö> = <º¯¼ö³ª°ª><»ê¼ú¿¬»êÀÚ><º¯¼ö³ª°ª> c-shellÀÇ °æ¿ì @º¯¼ö=<º¯¼ö³ª°ª><»ê¼ú¿¬»êÀÚ><º¯¼ö³ª°ª> 18. shell scriptÀÇ debugging 1) shell tracing set verbose - shell script program¿¡ set verboseÀÇ ¸í·ÉÀ» Ãß°¡ÇÏ¿© ¸í·ÉÀ» ÃßÀû Á¶»ç ÇÒ¼öÀÖ´Ù. korn shellÀÇ °æ¿ì c-shellÀÇ °æ¿ì ksh -v <½ÇÇà shell script¸í> csh -v <½ÇÇà shell script¸í> ksh -x <½ÇÇà shell script¸í> csh -x <½ÇÇà shell script¸í> Revision History ÀÛ¼ºÀÏÀÚ : 96.06.14 ÀÛ¼ºÀÚ : ±èµµ°æ ¼öÁ¤ÀÏÀÚ : ¼öÁ¤ÀÚ