유닉스 기초/[유닉스 이론과 실습] 연습문제

[유닉스 이론과 실습] 13장 연습문제

ʕっ•ᴥ•ʔっ 프론트엔드 개발하는 쿼카 2021. 6. 18. 02:57

01. 다음과 같이 스크립트에 명령행 인자를 지정하여 실행하였다. $0이 출력하는 값이 무엇인가?

 

     $ out_script 10 20 30

 

     ① out_script

     ② 10

     ③ 20

     ④ 10 20 30

 

더보기

정답 : ① out_script

▶ $0 : 현재 셸 스크립트의 이름

 


 

02. 다음과 같은 인용부호를 사용한 경우 무엇이 출력되는가?

 

     $ echo "'`date''"

 

     ① 'date'

      date

      '2019년 05월 19일 일요일 오후 9시 23분 39초 KST'

      2019년 05월 19일 일요일 오후 9시 23분 39초 KST

 

더보기

정답 : ③ '2019년 05월 19일 일요일 오후 9시 23분 39초 KST'

 

 


 

03. 다음과 같이 실행할 경우 무엇이 출력되는가?

 

     $x=10

     $x=$x*2

     $echo $x

 

     ① 10

      20

      $x*2

      10*2

 

더보기

정답 : ④ 10*2

 


 

04. 파일이 존재하는지 확인하기 위한 스크립트를 작성하려고 한다. 어떤 코드를 사용해야 하는가?

 

     ① if [[ -f $file ]]

      if [[ -e $file ]]

      if (( -f $file ))

      if (( -e $file ))

 

더보기

정답 : ② if [[ -e $file ]]

 

▶ if [[ ]] : 내장명령 [[ ]] 사용

 -f file : 파일은 존재하지만 디렉토리는 존재하지 않음

 -e file : 파일이 존재

 


 

05. 함수의 리턴값을 받아 출력하려고 한다. 리턴값은 어디에 저장되는가?

 

     ① $0

      $1

      $x

      $?

 

더보기

정답 : ④ $?

 

함수의 리턴값은 $?에 저장된다.

 


 

06. 다음 연산식의 실행 결과와 종료 값을 확인해 표를 채우시오.(단, a=2, b=4, c=8)

 

연산식 결과 값 종료 값
3 * 5 / 4    
a >> 2    
a ^ b    
a < 2 && c > 5    

 

더보기

정답 : 

 

연산식 결과 값 종료 값
3 * 5 / 4    
a >> 2    
a ^ b    
a < 2 && c > 5    

 


 

07. 변수의 값이 "path=/export/home/user1/.profile"일 때 주어진 문자열 처리 결과 값을 적으시오.

 

    º ${path%/user1*}

    º ${path##*/}

 

더보기

정답 : /export/home

        .profile

 

${variable%pattern} : variable 값 뒤부터 패턴과 일치하는 가장 작은 부분을 찾아 제거

 ${variable%%pattern} : variable 값 뒤부터 패턴과 일치하는 가장 큰 부분을 찾아 제거

 ${variable#pattern} : variable 값 앞부터 패턴과 일치하는 가장 작은 부분을 찾아 제거

${variable##pattern} : variable 값 앞부터 패턴과 일치하는 가장 큰 부분을 찾아 제거

 


 

08. 두 파일의 이름을 인자로 받아 다음과 같이 복사하는 스크립트를 작성하시오. 단, my_cp1은 cp 명령을 사용해 스크립트 안에서 파일 내용을 복사하고, my_cp2는 cp 명령 대신 파일 내용을 직접 읽어서 복사하시오.

 

     ˙ 파일명 : my_cp

     ˙ 동작 예 :

                    $ my_cp . file (오류 체크)

                        첫 번째 인자는 일반 파일이어야 합니다.

                    $ my_cp file1 file2 (file1을  file2로 복사)

                    $ my_cp file1 dir1 (file1을 dir1 아래로 복사)

                    $ my_cp file1

                        사용 방법 : my_cp 파일명 파일명 또는 my_cp 파일명 디렉토리명

 

더보기

정답 : 

#!/bin/bash
#
# my_cp1
#

file1=$1
file2=$2

if [[ ! -f $file1 ]]
then
	echo "first parameter is normal file."
eilf [[ -f $file1 && -f $file2 ]]
then
	cp $file1 $file2
elif [[ -f $file1 && -d $file2 ]]
then
	cp $file1 $file2
else
	echo "error"
fi
#!/bin/bash
#
# my_cp2
#

file1=$1
file2=$2

if [[ ! -f $file1 ]]
then
	echo "first parameter is normal file."
elif [[ -f $file1 && -f $file2 ]]
then
	cat $1 > $2
elif [[ -f $file1 && -d $file2 ]]
then
	cat $1 > $2/$1
else
	echo "error"
fi

 


 

09. 파일 조건 테스트 명령을 이용해 인자로 주어진 파일의 종류를 출력하는 스크립트를 작성하시오.

 

     ˙ 파일명 : my_file

     ˙ 동작 예 : 

                    $ my_file test_file

                        test_file : 일반 파일입니다.

                    $ my_file /bin

                        /bin : 심볼릭 링크 파일입니다.

                    $ my_file /dev/dsk/c0t0d0s0

                        /dev/dsk/c0t0d0s0 : 블록 장치 특수 파일입니다.

 

더보기

정답 :

#!/bin/bash
#
# my_file
#

if [[ -f $1 ]]
then
	echo "$1 : normal file"
elif [[ -L $1 ]]
then
	echo "$1 : symbolic link file"
elif [[ -b $1 ]]
then
	echo "$1 : block device file"
else
	echo "error"
fi

 

 


 

10. 포지션 인자가 무엇인지 확인해보자. 스크립트에서 다음을 먼저 실행하도록 하고, 각 질문을 수행하도록 스크립트를 작성하시오.

 

     ˙ 파일명 : my_pos

     ˙ 포지션 인자 : set unix cook book hanbit

 

     1) 전체 포지션 인자들을 출력하시오.

 

     2) 포지션 인자의 개수를 출력하시오.

 

     3) unix가 저장된 포지션 인자는 무엇인가?

 

더보기

정답 :

#!/bin/bash
#
# my_pos
#

echo "total parametars of position : "$@""
echo "the number of parametar of position : $#"

if [[ $1 == 'unix' ]]
then
	echo "'unix' position is \$1"
elif [[ $2 == 'unix' ]]
then
	echo "'unix' position is \$2"
elif [[ $3 == 'unix' ]]
then
	echo "'unix' position is \$3"
elif [[ $4 == 'unix' ]]
then
	echo "'unix' position is \$4"
elif [[ $5 == 'unix' ]]
then
	echo "'unix' position is \$5"
else
	echo "error"
fi

▶ $# : 전체 포지션 인자 개수

 "$@" : "$1", "$2", "$3"를 의미하며 각각 독립적인 문자열로 취급됨

 


 

11. set 명령으로 다음과 같이 date 명령을 실행하여 포지션 인자들에 값을 위치시키고, 포지션 인자를 사용하여 다음과 같은 형태로 출력이 되도록 스크립트를 작성하시오.

 

     ˙ 파일명 : my_date

     ˙ set : set $(date)

     ˙ 출력 형태 : 연도 월 일 요일

 

더보기

정답 :

#!/bin/bash
#
# my_date
#

set $(date)
echo "$6 $2 $3 $1"

 


 

12. 사용자를 등록하는 기능을 구현하려고 한다. 우선 사용자가 원하는 ID를 입력받아 현재 시스템에 등록된 ID인지 /etc/passwd 파일을 검색하여 사용할 수 있는지 여부를 알려주는 스크립트를 작성하시오.

 

     ˙ 파일명 : my_checkid

     ˙ 입력 : 사용자ID

     ˙ 출력 : You can use XXX, or Already exists( XXX) .

 

더보기

정답 : 

#!/bin/bash
#
# my_checkid
#

a='cat /etc/passwd | grep $1 | wc -l'

if [[ $a == 1 ]]
then
	echo "Already exists ($1)"
else
	echo "You can use $1"
fi

 


 

13. 다음과 같은 명령의 목록을 출력하고 해당 명령의 번호를 선택하여 실행하도록 하는 스크립트를 작성하시오. quit를 선택하면 스크립트는 종료된다.

 

     ˙ 파일명 : my_menu

     ˙ 입력 : 1) pwd

               2) who

               3) ps

               4) ls

               5) quit

 

더보기

정답 :

#!/bin/bash
#
# my_menu
#

PS3="Input command(1~5): "

select cmd in pwd who ps ls quit	# pwd=1, who=2, ps=3, ls=4, quit=5
do
	case $cmd in
    	pwd) pwd ;;
        who) who ;;
        ps) ps ;;
        ls) ls ;;
        quit) break ;;
        *) echo "Invalid input, select" ;;
	esac
    REPLY=-1 # null
done