본문 바로가기

리눅스

리눅스 쉘 스크립트 사전 ver.0208

반응형

 

1. echo 

 

- echo $VAR, echo "$VAR", echo "${VAR}" 모두 동일한 기능 수행

 

- 큰따옴표(")를 쓰면 $a의 실제 값을 출력할 수 있고(변수의 값) 작은따옴표(')를 쓰면 그냥 $a이란 문자열 자체를 출력

2. 특정 라인 출력

1) head 와 tail 명령어를 응용하여 출력

① 범위 출력

25~30번째 줄 출력하고 싶을 때, 다중 명령어를 사용하여 결과값 출력

# head -30 test | tail -6

test 파일의 맨 앞부터 20번째 줄까지 출력하는 결과에서 뒤에서 5째줄까지만 출력

 

② 특정 라인 출력

21번째 줄을 출력

# head -19 test | tail-1

test 파일의 맨 앞부터 19번째 줄까지 출력하는 결과에서 뒤에서 1줄만 출력

 

2) sed 명령어를 사용하여 출력

① 범위 출력

16~20번째 줄 출력

# sed -n '16, 20p' test

 

② 특정 라인 출력

15번째 줄을 출력하고 싶을 때

# sed -n 15p test

 

③ 특정 행부터 파일 끝까지 출력하고 싶을 때

20번째 줄부터 파일 끝까지 출력

# sed -n '20, $p' test

or

# sed -n "20, \$p" test

여기는 쌍따옴표를 사용하여 '$'문자가 마지막을 의미할 수 있게 역슬래시를 붙여서 특수 문자의

의미를 그대로 지켜줄 수 있게 해준 것입니다.

그렇지 않으면 이 '$'문자가 변수를 나타내는 뜻으로 해석

 

3) awk 명령어를 사용하여 출력

① 범위 출력

16~20번째 줄 출력하고 싶을 때

# awk "NR >= 16 && NR <= 20" test

 

② 특정 라인 출력

19번째 줄을 출력하고 싶을 때

# awk 'NR==19' test

 

③ 특정 행부터 파일 끝까지 출력하고 싶을 때

80번째 줄부터 파일 끝까지 출력하고 싶을 때

# awk "NR >= 80" test

 

 

3. 설정파일(conf)에 내용 입력

 

cat << EOF >  [파일 경로]

[내용1]

[내용2]

[내용3]

[내용4]

[내용5]

EOF

※ 마지막 EOF 앞에 공백이 있으면 안됨 (tab 포함)

cat <<EOF > /etc/memcached.conf
-d
logfile /var/log/memcached.log
-m 64
-p 11211
-u memcache
-l 0.0.0.0
-c 4096
EOF

 

4. 변수에 사용자 입력 받기

① echo와 read 조합

프롬프트 부분과 문자 입력 부분을 확실하게 구분할 있고, 프롬프트의 문자 색을 변경할 수 있다는 장점

echo -n " 입력하세요 : "

read var

 

② read만 사용

 

read -p "입력하세요 : "

 

 

 

5. 함수 만들기

 

함수 명()

{

         명령어1

         명령어2

}

#IP 받아오는 함수 
getIP()
{
        i=`cat ~/DB | grep -i $1 | awk '{print $1}'`
        echo $i
}

6. 계속 입력받기 (while문)

 

while [ "$KEY" = "" -o "$KEY" = "y" -o "$KEY" = "Y" ]
do
        echo -n " Node name : "
        read NODE

        if [ "$NODE" = "" ]; then
                continue
        fi

        echo -n " IP : "
        read IP

        if [ "$IP" = "" ]; then
                continue
        fi

        echo "${IP}     ${NODE}" >> /etc/hosts
        echo "${IP}     ${NODE}" >> ~/DB
        #sort -o $DB $DB

        echo -n "계속 입력 하겠습니까? (y/n) (default=y) : "
        read KEY
done

 

 

7. Case문

while : 
  do
     echo "Menu:"
     echo "1) Control Node"
     echo "2) Compute Node"
     echo "3) Network Node"
     echo "4) Storage Node"
     read node_sel

     case $node_sel in
         1)
            node_sel=0
            break
            ;;
         2)
            if [ $(cat ~/DB | grep compute* | wc -l) -ne 1 ]; then
                echo -n "/etc/hosts에 등록한 compute노드 입력하세요: "
                read comnode
            else
                comnode=$(cat ~/DB | grep compute* | awk '{print $2}')
            fi
            node_sel=1
            break
            ;;

         3)
            node_sel=2
            break
            ;;

         4)
            node_sel=3
            break
            ;;
         *)
            echo "Error: Unknown Command"
            ;;
      esac

done

 

 

8. 이전 실행이 성공했는지 확인

설치가 잘됐는지 확인할때 사용

더보기
#설치 체크
if [ "$?" -eq 0 ]; then
   echo '                                                                '
   echo '----------------------------------------------------------------'
   echo '-------------Openstack Package install Success------------------'
   echo '----------------------------------------------------------------'
   echo '                                                                '
else
   echo '                                                                '
   echo '----------------------------------------------------------------'
   echo '---------------Openstack Package install fail-------------------'
   echo '----------------------------------------------------------------'
   echo '                                                                '
fi

 

 

※ 특수 파라미터

 

더보기
$* 1부터 시작하는 위치 파라미터의 확장, 큰 따옴표로 구분하고 IFS 특수 변수의 첫 문자로 구분되는 각 파라미터의 값으로 하나의 단어를 확장하며, 전체 파라미터값을 가지고 있다. 만약 IFS가 NULL이거나 해제되어 잇으면 파라미터는 스페이스로 구분
$@ 1부터 시작하는 위치 파라미터의 확장이며, 큰 따옴표로 확장되면 각 파라미터는 하나의 구분 단어로 확장되고, 
전체 파라미터값을 가짐
$# 십진수의 위치 파라미터 전체 개수를 의미
$? 최근 실행된 포그라운드 파이프라인의 종료상태를 가지고 있음(0은 정상적으로 종료)
$- 실행하자마자 set 내장명령을 통해 또는 쉘 자체에 의해 설정된 현재 옵션 플래그로 확장
$$ 현재 쉘의 프로세스 ID
$! 가장 최근에 백그라운드로 실행된 프로세스의 ID를 가지고 있음
$0 쉘 또는 쉘 스크립트의 이름을 가지고 있음
$1,$2...$n 스크립트에 넘겨진 n번째 아규먼트
$_ 마지막 인수를 출력

 

$0, $1~$n

쉘 스크립트 이름 = test.sh

아규먼트 = 인수 = 인자 = 파라미터 = Alice, Bob, Carol

 

$0 : test.sh

$1 : Alice

$2 : Bob

$3 : Carol

$# : 3

#!/bin/bash

echo "스크립트 이름 : $0"
echo "첫번째 파라미터 : $1"
echo "두번째 파라미터 : $2"
echo "세번째 파라미터 : $3"
echo "파라미터 개수: $#"
echo "전체 파라미터 : $*"
echo "전체 파라미터 : $@"

7. 리눅스 쉘에서 DB명령어

더보기

mysql -e "[DB명령어]"

 

mysql -e "UPDATE mysql.user SET password = password('1234') WHERE user = 'root';"
mysql -e "UPDATE mysql.user SET plugin='mysql_native_password' WHERE user='root';"
mysql -e "FLUSH PRIVILEGES;"

 

DB에 패스워드 설정되있는경우

 

mysql -u[DB계정] -p[DB패스워드] -e "[DB 명령어]"

mysql -uroot -p1234 -e "CREATE DATABASE cinder;"
mysql -uroot -p1234 -e "GRANT ALL PRIVILEGES ON neutron.* TO 'cinder'@'localhost' IDENTIFIED BY '$Open_Pass';".
mysql -uroot -p1234 -e "GRANT ALL PRIVILEGES ON neutron.* TO 'cinder'@'%' IDENTIFIED BY '$Open_Pass';"
mysql -uroot -p1234 -e "FLUSH PRIVILEGES;"

 

 

9. 문자열

 

# vi DB

1.1.1.1 controller
2.2.2.2 compute01
3.3.3.3 compute02
4.4.4.4 cinder
5.5.5.5 neutron

 

 

1) 문자열 추출

 

① controller의 아이피 찾기

# cat DB | grep -i control* | awk '{print &1}'

 

 

 

 

 

 

 

'리눅스' 카테고리의 다른 글

[리눅스]리눅스 명령어 사전  (0) 2024.05.20
[리눅스] 로그 분석 및 도구  (0) 2022.08.12
[Container]LXC  (0) 2021.07.09
[리눅스] 우분투 X-Window 설치  (0) 2021.07.08
리눅스 보안 점검(CCE 점검)  (0) 2021.04.28