02 - 쉘 스크립트 맛보기

Chapter 02 리눅스 쉘과 명령어 기초

문제풀이

1. 모든 쉘에서 사용 가능한 변수 만들기

환경 설정 파일인 /etc/profile 혹은 ~/.bashrc 이나 ~/.bash_profile 파일에 변수를 선언하고 source를 통해 쉘 환경설정 파일을 즉시 적용한다.

2. "ABC"라는 이름의 디렉토리를 만들고, 그 안에다가 User의 Home 디렉토리를 출력하는 쉘 스크립트 파일을 만들기

mkdir ABC
cd ABC 
vi ABC.sh
chmod +x ABC.sh
./ABC.sh

3. 1을 입력받으면 disk 사용량을, 2를 입력받으면 오늘 날짜를 출력하는 명령어가 포함된 case-test.sh 파일을 만들어서 실행해보자.

#방법 1
#!/bin/sh

var=$1

case $var in
        1)
                echo `df`
                ;;
        2)
                echo `date`
                ;;
esac
#방법 2
#!/bin/sh

echo -n "num : "
read num
case $num in
        1)
                df
                ;;
        2)
                date +%Y-%m-%d
                ;;
esac

4. 현재 위치를 알려주는 명령어를 ped라고 잘못 입력했을때 본래의 의도대로 재실행하려면 어떤 명령어를 사용해야하는가?

^e^d

  • 현재 위치를 알려주는 명령어 = pwd
  • ^old^new : 최근 히스토리 명령어에서 old 문자열을 new 문자열로 치환한다.

5. 쉘에 linux study 를 출력해보고 linux만 출력해보자.

echo linux study
echo !^

  • echo !$ : !$ 는 가장 최근 히스토리의 명령에서 가장 최근(마지막)의 아규먼트를 의미
  • echo !^ : !^는 가장 최근 히스토리 명령에서 첫번째 아규먼트를 의미

6. 현재 위치를 알려주는 명령어를 p만 입력하여 현재 위치를 출력하도록 하자

alias p=pwd

  • alias : 명령의 닉네임

7. 다음 조건을 만족하는 쉘스크립트 작성 및 실행

조건

  • ~/what_is_your_name.sh 파일 생성
  • 스크립트 실행시, 파라미터로 자신의 이름을 준다.
  • 예시 : sh what_is_your_name.sh chaehee
    - 스크립트에 myname 이라는 변수를 선언하고, 첫번째 파라미터 값을 myname에 대입
    • 스크립트 실행 결과
      • myname 변수를 출력
      • 만약 파라미터값이 없는 경우 sorry 출력

#!/bin/sh

myname=${1:-sorry}

echo $myname

8. dir1, dir2, dir3, dir4, dir5 디렉토리를 명령어 하나로 생성하고 삭제해보기

mkdir dir{1,2,3,4,5}
rm -d dir{1,2,3,4,5}

9. 입력한 디렉토리의 모든 파일 목록을 211124.txt 파일에 저장하는 출력하는 쉘 스크립트(pre.sh)를 작성해보자

#/bin/sh

read dir
ls -al $dir | grep ^-  > 211124.txt
cat 211124.txt

  • ls -al : 모든 파일 목록을 보여줌
  • ^- : -로 시작하는 목록을 보여줌 (파일의 경우 -로 시작하고 디렉토리는 d로 시작함)

10. 작업 디렉토리를 입력 받아 해당 디렉토리에 파일 수와 디렉토리 수를 출력하는 쉘 스크립트(pre2.sh)를 작성해보자

#/bin/sh

read dir
dir_cnt=`ls -al $dir | grep ^d | wc -l`
file_cnt=`ls -al $dir | grep ^- | wc -l`
echo "디렉토리 수 : $dir_cnt"
echo "파일 수 : $file_cnt"
  • wc:해당 파일의 단어수를 알려주는 명령어
옵션설명
-c문자 개수만 보여준다
-m캐릭터 개수만 보여준다
-l라인수만 보여준다
-w단어 개수만 보여준다
-L가장 긴 문장의 길이를 보여준다

11. 두 수의 평균을 구하는 avg라는 함수를 만들어 보자. (쉘 스크립트를 사용하지 않고)

 function avg() { echo "평균은 $[($1+$2)/2] 입니다." ;}

  • 산술 표현식 = $[산술표현식] or $((산술표현식))

12. /etc/passwd 파일 중에서 root가 포함된 줄을 출력하는데 에러가 발생하면 grep.err파일에 저장하고 그렇지 않으면 오름차순으로 sort.out 파일에 저장하는 명령을 한줄에 실행하라

grep root </etc/passwd 2>grep.err | sort > sort.out
혹은 
grep root /etc/passwd 2>grep.err | sort > sort.out

  • sort : 파일 내용을 오름차순으로 정렬

좋은 웹페이지 즐겨찾기