Cohe

리눅스 쉘 명령어2 본문

배포 배우기

리눅스 쉘 명령어2

코헤0121 2024. 7. 30. 12:54
728x90

쉘 명령어 2

  1. while 문
    : 조건식이 참인 동안 계속 반복하는 구문
  [형식]
  while [ 조건식 ]
  do
     반복할 내용들....
  done

while1.sh
======
#!/bin/bash  << bash로 실행시켜 주세요~!
while [ 1 ]
do
  echo "무한 반복합니다."
done
exit 0

예시) while 조건이 참인 경우 반복하는 것을 보여줌

  • 실습
#!/bin/bash

hap=0
i=1

while [ $i -le 10 ]
do
  hap=$((hap + i))
  i=$((i + 1))
done

echo "1부터 10까지의 합 : $hap"
exit
  • until : while문과 용도는 거의 비슷하고, 동작도 비슷함. 단, 조건식이 참이 아닌 거짓일 경우에 반복함.
 while2.sh를 until로 설정해 보기
#!/bin/bash
hap=0
i=10
until [  $i -lt 0   ]
do
        hap=`expr $hap + $i`
        i=`expr $i - 1`
done
echo "1부터 10까지의 합 : "$hap
exit 0
  • ** break, continue, exit, return
    break : 주로 반복문에서 사용하고 종료할 경우에 사용.
    continue : 반복문의 조건식으로 되돌리는 경우 사용.
continue.sh
========
#!/bin/bash
hap=0
i=0
while [ $i -lt 10 ]
do
  i=`expr $i + 1`

  if [ $i -eq 5 ]
  then
          echo $i
          continue
  fi

  hap=`expr $hap + $i`

done
echo "1부터 10까지의 합: "$hap
exit 0
  • exit 는 해당 프로그램을 종료 return 은 함수 안에서 사용될 수 있는 것으로 함수를
    호출한 곳으로 돌아가게 함.
예시) bce.sh  => break, continue, exit 예제
#!/bin/bash
echo "무한반복 입력을 시작합니다. (b: break, c:continue, e: exit)"
while [ 1 ]
do 
  read input
  case $input in
    b | B)
      break;;
    c | C)
      echo "continue를 누르면 while의 조건으로 돌아감"
      continue ;;
    e | E)
      echo "exit를 누르면 프로그램(함수)를 완전히 종료함"
      exit 1;;
  esac;
done
echo "break를 누르면 while을 빠져나와 지금 이 문장이 출력됨."
exit 0
  • 파라미터(인자)를 이용하는 함수
    : 함수의 파라미터(인자)를 사용하면 함수를 호출할 때에 뒤에 파라미터(인자들)를 붙여서 호출.
    넘겨진 파라미터(인자) 사용은 $1, $2, $3, .... 으로 특수한 변수 값을 이용하여 불러와 사용함.
  [형식]
   ==함수 정의==
   함수이름 () {
      $1, $2, $3과 같이 특수변수를 사용하여 
      함수 동작 내용을 작성  
   }

      ==함수 호출==
   함수이름 인자1 인자2 인자3 .... 

evalexport의 설명 및 예시

1. eval

eval 명령은 문자열을 명령문으로 인식하고 실행하는 데 사용됩니다. 이를 통해 변수에 저장된 명령을 실행하거나, 복잡한 명령어를 구성할 수 있습니다.

예시:

# eval.sh
#!/bin/bash

# 변수 str에 명령어를 저장
str="ls -l eval.sh"

# 변수의 값을 출력
echo $str

# eval을 사용하여 변수에 저장된 명령어를 실행
eval $str

exit 0

위 예시에서는 str 변수에 저장된 문자열 ls -l eval.sheval을 통해 실행합니다. 이는 실제로 ls -l eval.sh 명령을 실행하는 것과 동일한 효과를 가집니다.

2. export

export 명령은 변수를 환경 변수로 선언하여, 현재 쉘 스크립트뿐만 아니라 호출된 다른 프로그램이나 스크립트에서도 사용할 수 있게 만듭니다. 즉, 변수의 범위를 전역으로 확장합니다.

예시:

# exp1.sh
#!/bin/bash

# 전달받은 변수를 출력
echo $var1
echo $var2

exit 0
# exp2.sh
#!/bin/bash

# 지역 변수 선언
var1="지역변수"

# 외부 변수 선언 (export)
export var2="외부변수"

# exp1.sh 스크립트를 실행
bash exp1.sh

exit 0

위의 예시에서는 exp2.sh에서 두 개의 변수를 정의합니다: var1var2. var1은 단순한 지역 변수로, exp1.sh에서 접근할 수 없습니다. 반면에 var2export를 통해 외부 변수로 선언되었기 때문에 exp1.sh에서도 접근할 수 있습니다.

실행 결과:

  • exp1.sh에서 var1은 출력되지 않으며, var2는 "외부변수"라는 값을 출력합니다. 이는 export 덕분에 var2의 값이 exp1.sh에서도 유효하게 유지되기 때문입니다.

printf, set, shift 명령어에 대한 설명 및 예시

1. printf

printf 명령은 C 언어의 printf 함수와 유사하게 형식화된 출력 기능을 제공합니다. 이를 통해 숫자, 문자열 등을 원하는 형식으로 출력할 수 있습니다.

예시:

# printf.sh
#!/bin/bash

# 변수 선언
var1=100.5
var2="재미있는 이시간 해피~~~스마일!!"

# 형식 지정 출력
printf "%5.2f \\n\\n \\t %s \\n" $var1 "$var2"

exit
  • %5.2fvar1을 소수점 두 자리까지 출력하며, 최소 5자리 폭을 확보합니다.
  • %svar2를 문자열로 출력합니다.
  • $var2는 공백을 포함할 수 있는 문자열이므로, " "로 감싸야 합니다. 공백이 포함된 문자열을 출력할 때 " "로 묶지 않으면 공백이 구분자로 해석되어 문자열이 잘릴 수 있습니다.

2. set$(명령)

set$(명령)은 쉘 스크립트에서 명령어의 출력을 변수로 처리할 때 유용합니다. $(명령)은 명령어를 실행하고 그 결과를 반환합니다. set은 이 결과를 위치 매개변수로 설정합니다.

예시:

# set.sh
#!/bin/bash

# 현재 날짜를 출력
echo "오늘 날짜는 $(date) 입니다."

# 현재 날짜를 위치 매개변수로 설정
set $(date)

# 날짜의 네 번째 필드 (요일) 출력
echo "오늘은 $4요일 입니다."

exit 0
  • $(date)는 현재 날짜와 시간을 출력합니다.
  • set $(date)date 명령의 결과를 위치 매개변수로 설정하여, $1, $2, ...로 접근할 수 있습니다. 여기서는 날짜의 네 번째 필드인 요일($4)을 출력합니다.

3. shift

shift 명령은 위치 매개변수를 왼쪽으로 한 단계 이동시킵니다. 이를 통해 매개변수를 순차적으로 처리할 수 있습니다.

예시:

# shift.sh
#!/bin/bash

# 함수 정의
myfunc () {
  str=""
  while [ "$1" != "" ]
  do
    str="$str $1"
    shift
  done
  echo $str
}

# 함수 호출
myfunc AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK

exit 0
  • myfunc 함수는 위치 매개변수들을 순차적으로 받아서 공백으로 구분된 문자열로 합칩니다.
  • shift 명령은 $1을 처리한 후 $2$1으로 이동시키며 반복합니다.
  • 최종적으로 모든 매개변수가 문자열로 결합되어 출력됩니다.

이 예시에서 myfunc는 여러 개의 인자를 받아서 이를 공백으로 구분된 문자열로 출력합니다. shift 명령을 사용하여 각 매개변수를 하나씩 처리합니다.

======================================================
문제1] 파일을 복사하는 스크립트를 작성하세요.

[동작]
복사할 파일 : (대상입력)
복사할 위치 및 파일이름 : (복사 위치 및 파일명)

copy_file.sh 스크립트

#!/bin/bash

# 복사할 파일 경로 입력 받기
read -p "복사할 파일 경로를 입력하세요: " source_file

# 복사할 위치 및 파일 이름 입력 받기
read -p "복사할 위치 및 파일 이름을 입력하세요: " destination_file

# 파일이 존재하는지 확인
if [ ! -f "$source_file" ]; then
    echo "오류: 복사할 파일이 존재하지 않습니다."
    exit 1
fi

# 파일 복사
cp "$source_file" "$destination_file"

# 복사 성공 여부 확인
if [ $? -eq 0 ]; then
    echo "파일이 성공적으로 복사되었습니다."
else
    echo "파일 복사에 실패했습니다."
    exit 1
fi

exit 0

설명

  1. 파일 경로 입력 받기: read -p 명령을 사용하여 사용자로부터 복사할 파일 경로와 복사할 위치 및 파일 이름을 입력받습니다.
  2. 파일 존재 여부 확인: if [ ! -f "$source_file" ]; then 구문을 사용하여 입력된 복사할 파일이 존재하는지 확인합니다. 존재하지 않을 경우 오류 메시지를 출력하고 스크립트를 종료합니다.
  3. 파일 복사: cp "$source_file" "$destination_file" 명령을 사용하여 파일을 복사합니다.
  4. 복사 성공 여부 확인: if [ $? -eq 0 ]; then 구문을 사용하여 cp 명령의 성공 여부를 확인하고 성공 여부에 따라 적절한 메시지를 출력합니다.
  • 확인
user1@myserver01:~/shellscript$ vim copy_file.sh
user1@myserver01:~/shellscript$ chmod +x copy_file.sh
user1@myserver01:~/shellscript$ ./copy_file.sh
복사할 파일 경로를 입력하세요: ./copy_file.sh
복사할 위치 및 파일 이름을 입력하세요: ./test
파일이 성공적으로 복사되었습니다.

'배포 배우기' 카테고리의 다른 글

Docker  (1) 2024.08.08
CI/CD 배포  (0) 2024.08.05
리눅스의 쉘 스크립트  (0) 2024.07.29
가상 서버에 jar 파일 넣어서 배포하는 법 - RDS 설정  (0) 2024.07.29
리눅스 다운  (0) 2024.07.25