주요미리정의된변수의의미 PS1 1 차프롬프트문자열 명령어입력을기다리고있음을알려줌 특수한내용표시방법은 p108 표참조 PS1의기본값 : "[\u@\h \W]\$ " [gdhong@magics dir]$ $ PS1="[\W] $ "... 디렉토리이름만나타나게변경 PS2 2 차프롬프트문자열 명령어입력후 Enter를입력했을때에추가입력을기다림을알려줌 $ echo "Linux... " 로시작하면 " 로끝나야함 > shell... 2차프롬프트출력, 입력요청 > prompt"... 2차프롬프트출력, 입력요청 PS2의기본값 :">" $ PS2="2> "... 변경 주요미리정의된변수의의미 (2) HOME 사용자홈디렉토리 HOME 값이변경되면다음 cd 명령어동작에영향을줌 $ cd ; cd $HOME 동작 CDPATH 이동할디렉토리위치를찾는디렉토리경로로사용 "cd 절대경로 " 또는 "cd 상대경로 " 해당디렉토리로이동 "cd 디렉토리명 " 현재디렉토리와 CDPATH 에등록된디렉토리를검색하여이동할디렉토리를찾아서해당디렉토리로이동 $ CDPATH=/lib:/usr/lib... CDPATH에 2개의디렉토리추가 $ cd java /usr/lib/java... /usr/lib에있는java 디렉토리로이동 33 34 5.13 명령어대치 명령어대치 : `command` `command` 가 command 의실행결과로대치됨 이기능을사용하면명령어의출력을인수로사용할수있다. $ echo Today is `date` Today is 2015. 09. 24. ( 목 ) 13:21:35 KST $ echo 현재 `who wc -l`명이사용중입니다. 현재 4명이사용중입니다. bash의명령어대치 : $(command) $(command) 은 `command`와같지만, 중첩하여사용하기가쉽다. $ date +%Y... 오늘의연도를출력 2016 $ echo 올해는 $(date +%Y) 년이다.... 명령어대치사용올해는 2016년입니다. $ echo 내년은 $(expr $(date +%Y) + 1) 년... 명령어대치중첩사용내년은 2017년입니다. expr : 수식연산명령어 35 ( 요약 ) 셸의 3 가지대치기능 파일이름대치 와일드카드 (*,?, [.. ]) *.c 파일이름패턴에매칭되는파일이름목록 변수대치 변수값접근 $var 변수 var 값 명령어대치 `command`, $(command) 명령어 command의실행결과 프로그램 ( 명령어 ) 에값을전달하는경로 command 대치 argument process 1 pipe stdin process 2 stdout variable 대치 variable env. variable 36
5.14 인용 (quote) 과대치금지 5.15 별명 (alias) 메타문자기능금지 역슬래시문자 \( 탈출문자 ) 와함께사용, 또는 인용부호 ( 따옴표 ) 안에서사용 작은따옴표 ' ' 모든대치금지 : 파일이름대치, 변수대치, 명령어대치, 메타문자 큰따옴표 " " 파일이름대치금지 $ myvar=korea $ echo f* $myvar `expr 1 + 2` \$ 모든대치가능 $ echo 'f* $myvar `expr 1 + 2` \$'... 모든대치, 탈출문자기능금지 $ echo "f* $myvar `expr 1 + 2` \$"... 파일이름대치금지 중첩된인용부호는바깥쪽인용부호가유효함 $ echo "f* '$myvar' `expr 1 + 2` \$" 'Korea'... 변수대치동작 alias 자주사용하는옵션을포함한명령어에별명을부여 $ alias del='rm i' ; = 전후에빈칸없음 $ alias cp='cp i' ; 같은이름의별명 별명내용출력 $ alias del ; 별명의정의내용출력 $ alias ; 현재부여된별명출력 명령어대신에별명을사용하여실행 (csh부터제공 ) $ del file1 ; rm i file1 $ cp file1 file2 ; cp i file1 file2 alias 제거 $ unalias cp alias 사용금지 \ 를앞에붙이거나작은따옴표사용 $ \cp file1 file2 ; 원래의명령어실행 cp file1 file2 $ 'cp' file1 file2 37 38 5.16 셸시작파일 (startup file) 시작파일과 source 명령어 셸시작 ( 초기화 ) 파일 셸이시작되기전에먼저실행되는명령어를포함한파일 자주사용하는 alias 정의, 셸변수값초기화작업에주로사용됨 대화형 (interactive) 셸의시작파일 (bash) 로그인셸의시작파일탐색및실행순서 /etc/profile ~/.bash_profile, ~/.bash_login, ~/.profile 비로그인셸의시작파일탐색및실행순서 ~/.bashrc ( 이파일은대개.bash_profile 에포함되어있음 ).bash_profile 로그인할때만실행하는명령어포함.bashrc 대화형셸을시작할때마다수행하는명령어포함 비대화형셸의시작파일 시작파일 = 환경변수 BASH_ENV 에저장된파일이름의파일 $ export BASH_ENV="~/.bashrc" ; 대화형셸의시작파일그대로사용 ( 예 ) 시작파일 ".bash_profile" - 환경변수 export PATH=$PATH:$HOME/bin export HISTSIZE=20 export HISTFILESIZE=10 ".bashrc" - alias, 지역변수 alias dir='ls F' alias rm='rm i' PS1="$ " source 명령어 현재셸에서셸프로그램실행 ( 주로시작파일사용 ) $ source.bash_profile $..bash_profile 39 40
5.17 히스토리 (history) history 참조 history 최근에실행한명령어들의목록을출력 $ history csh에서부터제공된기능으로재실행할때에사용 history 와관련된변수 HISTSIZE history 목록에저장할명령어개수 ( 기본 500) HISTFILE history file 이름 (~/.bash_history) HISTFILESIZE 다음세션을위해 history file 에저장할명령어개수 history 를포함한프롬프트 -\! $ PS1="\!$ " 36$ history 참조내용은명령어재실행또는인수로사용할수있음 $!! ; 이전명령어실행 $!ec ; 최근의 ec로시작하는명령어실행 $ echo bash $ ^bash^tcsh ; echo tcsh 실행 41 42 history 일부접근 파일이름일부접근 / 수정 history 의일부인수를선택하여사용가능 인수로사용된파일이름을수정하여사용가능 20$echoIlikehorseback riding 21 $ echo!!:3 // horseback 22 $ echo!20:2-$ // like horseback riding $ ls /usr/include/stdio.h $ echo!!:1:h /usr/include $ echo!-2:1:s/stdio/stdlib/ /usr/include/stdlib.h 43 44
fc 명령어와자동완성기능 fc fixed command 히스토리편집후실행가능 $ fc l ; 히스토리목록 $ fc s 42 ; 42번명령어재실행 $ fc s ; 직전명령어재실행 $ fc 42 ; 42번명령어편집후재실행 vi편집 자동완성기능 명령어완성 가능한명령어가 $ bz<tab><tab> ; 여러개이면목록출력 $ bzl<tab> ; 한개이면명령어자동완성 파일이름완성 / 변수완성 명령어완성과유사 /usr/include/st<tab><tab> $HIST<Tab><Tab> /usr/include/stdl<tab> $HiSTS<Tab> 5.18 디렉토리스택 pushd 인수디렉토리를디렉토리스택에저장하고, 인수디렉토리로이동 $ pushd /usr popd 디렉토리스택위의디렉토리를제거하고, 그다음디렉토리로이동 $ popd dirs 디렉토리스택내용출력 (~ 부터저장되어있음 ) $ dirs /etc /usr ~ 45 46 5.19 간단한셸프로그램 shell script 셸에서실행될수있는명령어들을포함하는파일 일반프로그램에서사용하는제어구문도사용할수있음 shell program이라고도하며, 실행허가권이부여되면실행가능 반복적으로수행할필요가있는다양한작업에유용 간단한 shell script의작성및실행 $ vi script1 ; 편집기로작성 echo Hi! Shell Script echo HOME=$HOME echo Today is `date` $ chmod +x script1 ; 실행허가권부여 $./script1 ; shell script 실행 Script 실행셸지정 Shell Script 를실행하는셸지정 첫줄내용에따라서 command를처리하는 shell이결정됨 1) # 없음 : /bin/sh 2) # 로시작 : 현재 shell 3) #! pathname : pathname ( 프로그램의절대경로명 ) 나머지줄의 # 은 comment로사용됨 # echo Hi! Shell Script echo HOME=$HOME echo Today is `date` #!/bin/bash echo Hi! Shell Script echo HOME=$HOME echo Today is `date` # comment 현재 shell script 실행 subshell ` script 에포함된유틸리티들 47 48
서브셸과변수 Shell Script 주석 서브셀의작업디렉토리 서브셀은자신만의작업디렉토리를가짐 서브셸에서의작업디렉토리변경이부모셸에영향을주지않음 셸변수와서브셸 환경변수 : 서브셸 ( 또는자식프로세스 ) 에복사됨 유용한정보전달에사용됨 지역변수 : 서브셸에복사되지않음 부모 shell 환경 지역 복사 환경 지역 subshell subshell 에서추가된변수 ( 부모 shell 에영향없음 ) # 로시작 ( 첫째줄제외 ) 콜론 (:) 명령어사용 콜론명령어 : 아무동작도하지않음. null 명령 $ : 'colon command' argument : ' comment line 1 comment line 2 ' here document 사용 <<MARK comment line 1 comment line 2 MARK 49 50 Argument 변수 5.20 셸의기타기능 인수 (argument) 접근셸변수 $0 : command name $n : n 번째 command line argument (n=1-9) $* : 모든 argument 의 list $# : argument 개수 $$ : shell 의 process id ( 임시파일이름생성에유용 ) 예 : script2 echo $0 and $1 and $2 and $3 echo $* : $# arguments $./script2 a b c d 표준입출력과파일기술자번호 0 : 표준입력 1 : 표준출력 2 : 표준에러출력 3 이상 : 추가로 open 되는파일들 표준에러출력의방향전환 : 2>, 2>> (cf) > 와 >> 는 1> 와 1>> 이다. $ cat in1 in2 2> out2 ; in1 존재, in2 미존재 $ cat in1 in2 > out1 2> out2 ; 두출력각각방향전환 두출력의연계 : 2>&1 ( 표준에러출력을표준출력장치로 ) $ cat in1 in2 2>&1 $ (cat in1 in2 2>&1) > out3 ; 두출력같은파일로방향전환 $ cat in1 in2 > out3 2>&1 ; 두출력같은파일로방향전환 $ cat in1 int2 2>&1 > out3 ; 에러출력 ( 원래표준출력 = 화면 ) ; 표준출력 (out3) 51 52
표준에러출력의방향전환 set 명령어사용한셸기능변경 (bash) 두출력의연계 : 1>&2 ( 표준출력을표준에러출력으로 ) $ echo This is stderr output 1>&2 ; echo 를사용한표준에러출력 표준출력과표준에러출력의동시방향전환 : >&, &> $ cat in1 in2 >& out3 표준에러출력의파이프전달 $ cat in1 in2 2>&1 wc ; 두출력파이프에동시전달 $ cat in1 in2 2>&1 > out4 wc ; 표준에러출력만파이프에전달 셸기능설정제어 noglob 파일이름대치금지 noclobber 파일덮어쓰기금지 notify 백그라운드작업종료시즉시알림 ignoreeof ^D 입력무시 설정방법 $ set o noglob ; 설정 $ set +o noglob ; 설정해제 $ set o noclobber (cf) csh에서는 set과 unset을설정과해제에사용함 noclobber 설정시에덮어쓰기 : > 53 54 5.21 내장명령어 help (bash) $ help 내장명령어목록을출력 $ help read 내장명령어사용법을출력 hash (sh) 경로디렉토리를검색하지않고명령어위치를빠르게찾도록, 명령어경로이름을해시테이블에저장 $ hash 해시테이블목록과사용횟수출력 type (bash) 명령어경로, 내장명령어여부, 별명정보제공 command (bash) 인수로제공된명령어실행시별명 (alias) 이나함수를사용하지않음 enable (bash) 내장명령어활성화 / 비활성화 $ enable n pushd ; 비활성화 $ enable pushd ; 활성화 55