셸 스 크 립 트 기초 지식 (상)

9991 단어 linuxshell

   간단하게 이해 하면 시스템 이 컴퓨터 하드웨어 와 상호작용 할 때 사용 하 는 중간 매체 로 시스템 의 도구 일 뿐이다.실제로 셸 과 컴퓨터 하드웨어 사이 에는 시스템 커 널 이 한 층 더 있다.예 를 들 어 컴퓨터 하드웨어 를 한 사람의 몸 에 비유 하면 시스템 내 핵 은 사람의 뇌 이 고 셸 은 사람의 이목 구비 에 비유 하 는 것 이 더 적절 한 것 같다.컴퓨터 로 돌아 오 면 사용자 가 직접 직면 하 는 것 은 컴퓨터 하드웨어 가 아니 라 셸 입 니 다. 사용 자 는 명령 을 셸 에 게 알 린 다음 에 셸 은 시스템 커 널 에 전송 하고 커 널 은 컴퓨터 하드웨어 를 지배 하여 각종 조작 을 수행 합 니 다.
   시험 환경 은 Liux 발표 버 전 (Redhat / CentOS) 시스템 에 기본적으로 설 치 된 셸 을 bash, 즉 Bourne Again Shell 이 라 고 합 니 다. 이것 은 sh (Bourne Shell) 의 증강 버 전 입 니 다.Bourn Shell 은 가장 먼저 일어 난 셸 입 니 다. 창시자 인 Steven Bourne 이 라 고 합 니 다. 그 를 기념 하기 위해 Bourn Shell 이 라 고 합 니 다. 검 사 는 sh 라 고 합 니 다.
2. Liux 셸 의 특수 기호
1. *: 0 개 이상 의 문자 나 숫자 를 대표 합 니 다.
2.、 ? :임의의 문자 만 을 대표 합 니 다.
3、  # :이 기 호 는 Liux 에서 '\ #' 뒤의 내용 Liux 가 무시 한 다 는 뜻 을 설명 합 니 다.
명령 의 시작 이나 중간 에 '\ #' 을 삽입 하면 Liux 는 무시 합 니 다.이 기 호 는 셸 스 크 립 트 에 많이 사 용 됩 니 다.
4.、 \ :탈 의 문자, 뒤의 특수 기호 (예 를 들 어 '\ *') 를 일반 문자 로 복원 합 니 다.
5、  | :파이프 문자, 기호 앞 명령 의 결 과 를 기호 뒤의 명령 에 던 지 는 역할 을 합 니 다.여기 서 언급 한 뒤의 명령 은 모든 명령 이 가능 한 것 이 아 닙 니 다. 일반적으로 문서 작업 에 대한 명령 이 자주 사용 되 는 것 입 니 다. 예 를 들 어 cat, less, head, tail, grep, cut, sort, wc, uniq, tee, tr, split, sed, awk 등 입 니 다. 그 중에서 grep, sed, awk 는 정규 표현 식 에서 반드시 파악 해 야 할 도구 입 니 다.
6、  $ :변수 앞 에 있 는 식별 자 를 제외 하고 또 하나의 묘 미 는 바로 '!' 이다.결합 하여 사용 하 다.
‘!$'이전 명중 의 마지막 변 수 를 표시 합 니 다.
3. 셸 스 크 립 트 구조 및 실행 방법
1. 셸 스 크 립 트 의 구조
   시작 줄 에 bash 경 로 를 지정 합 니 다: \ #! /빈 / bash, \ # 로 시작 하 는 줄 을 설명 으로 하고 스 크 립 트 의 이름 은. sh 로 끝 납 니 다. 이것 은 셸 스 크 립 트 를 구분 하 는 데 사 용 됩 니 다.
2. 셸 스 크 립 트 의 실행 방법
[root@hpf-linux shell]# cat test1.sh         //       
#!/bin/bash
echo "hello world!"
[root@hpf-linux shell]# ll
    4
-rw-r--r-- 1 root root 33 6   24 08:12 test1.sh
[root@hpf-linux shell]# chmod a+x test1.sh  
[root@hpf-linux shell]# ./test1.sh              //          ,            X   
hello world!
[root@hpf-linux shell]# /root/shell/test1.sh //        ,     X   
hello world!
[root@hpf-linux shell]# bash test1.sh     //          ,         ,                     
hello world!
[root@hpf-linux shell]# sh  test1.sh
hello world!
[root@hpf-linux shell]# /bin/bash test1.sh 
hello world!
[root@hpf-linux shell]# /bin/sh test1.sh 
hello world!
[root@hpf-linux shell]# /bin/sh -x test1.sh    //             ,                
+ echo 'hello world!'
hello world!

4. date 명령 의 안내
1. 자주 사용 하 는 옵션 과 디 스 플레이 형식
[root@hpf-linux shell]# date +%Y       //%Y       
2015
[root@hpf-linux shell]# date +%y       //%y         (1999  99)
15
[root@hpf-linux shell]# date +%M   //%M    (00~59)
07
[root@hpf-linux shell]# date +%m    //%m   (01~12)
06
[root@hpf-linux shell]# date +%d     //%d        (01~31)
24
[root@hpf-linux shell]# date +%h      //%h      (Jan~Dec)
6 
[root@hpf-linux shell]# date +%H     //%H    ,24   (00~23)
09

[root@hpf-linux shell]# date +%s     //%s    1970 1 1 00:00:00        
1435108154
[root@hpf-linux shell]# date +%S     //%S      (00~59)
08
[root@hpf-linux shell]# date +%F     //%F        
2015-06-24

[root@hpf-linux shell]# date  +%Y-%m-%d    // %F     
2015-06-24
[root@hpf-linux shell]# date +%T     //%T       ,24   (hh:mm:ss)
09:24:40
[root@hpf-linux shell]# date  +%H:%M:%S    // %T     
10:33:57
[root@hpf-linux shell]# date +%w     //%w         (0     )
3
[root@hpf-linux shell]# date +%W     //%W         (00~53,       )
25
[root@hpf-linux shell]# date +%j      //%j       (001~366)
175
[root@hpf-linux shell]# date +%Z     //%Z       ,   (CST)
CST
[root@hpf-linux shell]# date +%a      //%a        (Sun~Sat)
 
[root@hpf-linux shell]# date +%A     //%A       (Sunday~Saturday)
   
[root@hpf-linux shell]# date +%D    //%D   (mm/dd/yy)
06/24/15
[root@hpf-linux shell]# date -d @100   //   1970 1 1 00:00:00  100    
1970  01  01      08:01:40 CST
[root@hpf-linux shell]# date -d "-1 day" +"%F %T"  //          ,     “-”  “+”          ,    day  month( )、year( )、week( )、hour(  )、min(  )、sec( )。
2015-06-23 23:59:24

5. 셸 스 크 립 트 의 변수
1. 특정한 명령 의 결 과 를 참조 하고 변 수 를 사용 하여 대체 합 니 다.
[root@hpf-linux shell]# file=`which vim`    //           
[root@hpf-linux shell]# echo $file
/usr/bin/vim
[root@hpf-linux shell]# rpm -qf $file
vim-enhanced-7.2.411-1.8.el6.i686
          file        vim       ,   rpm      file          vim      
[root@hpf-linux shell]# rpm -qf `which vim`    //          ,         ,           。
vim-enhanced-7.2.411-1.8.el6.i686

확장 학습: 변수 file 은 현재 셸 환경 에서 만 유효 합 니 다. 하위 셸 에 들 어가 면 사용 할 수 없습니다. 하위 셸 에서 도 사용 하려 면 명령 행 에서 export 성명 을 전역 변수 로 사용 해 야 합 니 다.그러나 성명 후의 변 수 는 하위 셸 에서 사용 할 수 있 지만 터미널 을 따로 열 면 적용 되 지 않 습 니 다. 다른 터미널 에서 사용 하려 면 export 성명 의 전역 변 수 를 / etc / profile, / etc / bashrc 또는 홈 디 렉 터 리 의. bash 에 기록 해 야 합 니 다.profflee, bashrc 네 개의 파일 중 하나 입 니 다.기록 한 후에 앞의 두 파일 은 모든 사용자 가 사용 할 수 있 고, 뒤의 두 파일 은 집 디 렉 터 리 가 있 는 사용자 만 사용 할 수 있다 는 것 을 기억 해 야 한다.
2. 매개 변수의 변수:
[root@hpf-linux shell]# cat test3.sh 
#!/bin/bash
echo "\$0=$0"
echo "\$1=$1"
echo "\$2=$2"
echo "\$3=$3"
echo "\$#=$#"
[root@hpf-linux shell]# sh test3.sh  movies longls bols cangls
$0=test3.sh
$1=movies
$2=longls
$3=bols
$#=4

위의 예 를 통 해 $0 은 셸 스 크 립 트 자체 이 고 $1 은 수 동 으로 입력 한 첫 번 째 매개 변수 이 며, $2 는 수 동 으로 입력 한 두 번 째 매개 변수 이 며, $3 은 수 동 으로 입력 한 세 번 째 매개 변수 이 며, $\ # 통 계 를 위해 모두 몇 개의 매개 변 수 를 입력 하 였 는 지, 4 는 스 크 립 트 가 정의 한 디 스 플레이 매개 변수 가 세 개 이기 때문에 네 번 째 매개 변수 인 camgls 는 인쇄 되 지 않 았 습 니 다.
3. 수치 연산 방법
[root@hpf-linux shell]# aa=11;bb=22
[root@hpf-linux shell]# cc=$aa+$bb
[root@hpf-linux shell]# echo $cc     //       
11+22
[root@hpf-linux shell]# cc=$(($aa+$bb))
[root@hpf-linux shell]# echo $cc
33
[root@hpf-linux shell]# cc=$[$aa+$bb]
[root@hpf-linux shell]# echo $cc
33

위의 예 를 통 해 셸 환경 에서 수치 연산 을 할 때 직접 연산 을 하면 우리 가 원 하 는 결과 가 아니 라 수치 연산 을 정확하게 사용 하려 면 [] 또는 () 를 추가 하여 연산 을 해 야 원 하 는 연산 결 과 를 얻 을 수 있다 는 것 을 알 수 있다.
6. 셸 스 크 립 트 의 논리 적 판단 if
1. if 문장의 형식
형식 1: if 조건;then 구문;fi
형식 2: if 조건;then 구문;else 구문;fi
형식 3: if...;then … ;elif …; then …; else …; fi
2. if 구문 논리 판단 식
if [ $a -gt $b ]      //lt 이상
if [ $a -lt 5 ]         //이하
if [ $b -eq 10 ]     //eq 는
if 문장의 판단 표현 식 에 대해 서 는 괄호 안에 있 는 빈 칸 을 주의해 야 합 니 다. 셸 의 가 독성 을 높이 기 위해 서 는 수치 연산 표현 식 에 두 개의 작은 괄호 ((() 를 사용 하 는 것 을 권장 합 니 다. 괄호 [] 를 사용 하면 논리 적 판단 식 과 함께 사용 할 때 오류 가 발생 할 수 있 습 니 다.셸 에 서 는 <, >, = 등 연산 기 호 를 거의 사용 하지 않 으 며, lt, lt 등 을 사용 하여 연산 기 호 를 표시 합 니 다. 아래 에 알파벳 으로 연산 자 를 표시 합 니 다.
... 보다 크다         >          gt (greater than)
... 보다 작다         <          lt (less than)
... 보다 크다  >=       ge
이하  <=       le
... 과 같다         ==       eq(equal)
같 지 않다      !=        ne
3. if 판단 파일, 디 렉 터 리 속성 
[- f file] 일반 파일 인지, 존재 하 는 지 판단 합 니 다.
[- d file] 디 렉 터 리 여 부 를 판단 하고 존재 합 니 다.
[- e file] 파일 이나 디 렉 터 리 의 존재 여 부 를 판단 합 니 다.
[- r file] 파일 읽 을 수 있 는 지 여 부 를 판단 합 니 다.
[- w file] 파일 을 쓸 수 있 는 지 여 부 를 판단 합 니 다.
[- x file] 파일 실행 가능 여부 판단
4. if 판단 특수 용법 
스 크 립 트 를 쓸 때 이러한 요구 가 있 습 니 다. 스 크 립 트 를 실행 할 때 오류 로 인해 변수 가 비어 있 지만 판단 처 리 를 하지 않 으 면 알 수 없 는 오류 가 발생 할 수 있 습 니 다. 따라서 if 문 구 를 사용 하여 변수 가 비어 있 는 지 여 부 를 판단 하 는 방법 을 소개 합 니 다.
[root@hpf-linux shell]# n=`wc -l /etc/passwd  |awk  '{print $3}'`
[root@hpf-linux shell]# echo $n

[root@hpf-linux shell]#  if [ -z $n ];then echo "\$n is null";fi
$n is null
[root@hpf-linux ~]#  n=`wc -l /etc/passwd  |awk  '{print $1}'`   
[root@hpf-linux ~]# echo $n
31   
[root@hpf-linux ~]#  if [ ! -z $n ];then echo "\$n is not null";fi
$n is not null

위의 예 를 통 해 n 이 비어 있 기 때문에 if 구문 에서 - z 로 비어 있 는 지 여 부 를 판단 해 야 한 다 는 것 을 설명 합 니 다!z 는 n 이 비어 있 지 않 은 지 여 부 를 판단 하 는 데 사용 되 며, 값 이 있 으 면 then 후의 표현 식 결 과 를 출력 합 니 다.
5. 예 를 들 어
두 개의 숫자 를 수 동 으로 입력 하고 두 숫자의 크기 를 판단 합 니 다.
[root@hpf-linux shell]# cat test4.sh
#!/bin/bash

read -p "       a= " a
read -p "       b= " b

if   [ $a -eq $b ]
  then
    echo "a  b"
elif [ $a -lt $b ]
  then
    echo "a  b"
else
   echo "a  b"
fi
[root@hpf-linux shell]# sh test4.sh 
       a= 3
       b= 6
a  b

입력 한 숫자 여 부 를 판단 합 니 다. 직접 종료 하지 않 으 면 홀수 인지 짝수 인지 판단 합 니 다.
[root@hpf-linux shell]#  cat test5.sh
#!/bin/bash

read -p "     a= " a
n1=`echo $a |grep -c [^0-9]`              //              ,   1      。
if [ $n1 -eq 1 ]
then
   echo "        "
   exit 1
fi

n2=$(($a%2))
if [ $n2 -eq 1 ]
then 
   echo "       "
else
   echo "       "
fi
[root@hpf-linux shell]# sh  test5.sh 
     a= 45
       
[root@hpf-linux shell]# sh  test5.sh 
     a= fdgsd
        

디 렉 터 리 에 있 는 파일 이 일반 파일 인지 디 렉 터 리 파일 인지 판단 합 니 다.
[root@hpf-linux shell]# cat test6.sh 
#!/bin/bash

read -p "          : " a

if [ -f $a ]
then
   echo "        "
elif [ -d $a ]
then
  echo  "        "
else
  echo  "              "
fi
[root@hpf-linux shell]# ll
    28
drwxr-xr-x 2 root root 4096 6   25 05:20 cangls
-rwxr-xr-x 1 root root   33 6   24 08:12 test1.sh
-rw-r--r-- 1 root root   64 6   25 00:28 test2.sh
-rw-r--r-- 1 root root   83 6   25 00:33 test3.sh
-rw-r--r-- 1 root root  208 6   25 03:55 test4.sh
-rw-r--r-- 1 root root  253 6   25 04:18 test5.sh
-rw-r--r-- 1 root root  229 6   25 05:24 test6.sh
[root@hpf-linux shell]# sh  test6.sh 
          : cangls
        
[root@hpf-linux shell]# sh  test6.sh 
          : test1.sh
        

세 개의 작은 스 크 립 트 의 요약:
위의 세 가지 간단 한 스 크 립 트 를 통 해 우 리 는 셸 스 크 립 트 의 기본 적 인 프로 그래 밍 방향 을 대충 알 수 있 습 니 다. 그 중에서 특히 마지막 예 는 링크 파일, 소켓 파일 등 판단 을 추가 할 수 있 습 니 다. 한 마디 로 프로 그래 밍 에 있어 우 리 는 실천 을 많이 해 야 합 니 다. 비록 위의 예 는 비교적 간단 하지만 제 가 할 때 빈 칸 이 적 고 키워드 가 잘못 쓸 수 있 습 니 다.키 워드 를 적 게 쓰 는 현상 이 므 로 앞으로 우리 가 프로 그래 밍 할 때 세심 하고 냉정 하 게 하 는 등 좋 은 프로 그래 밍 습관 을 가 져 야 앞으로 의 업무 에서 효율 을 유지 할 수 있 습 니 다 ^ ^.

좋은 웹페이지 즐겨찾기