셸 스 크 립 트 기초 지식 (상)
간단하게 이해 하면 시스템 이 컴퓨터 하드웨어 와 상호작용 할 때 사용 하 는 중간 매체 로 시스템 의 도구 일 뿐이다.실제로 셸 과 컴퓨터 하드웨어 사이 에는 시스템 커 널 이 한 층 더 있다.예 를 들 어 컴퓨터 하드웨어 를 한 사람의 몸 에 비유 하면 시스템 내 핵 은 사람의 뇌 이 고 셸 은 사람의 이목 구비 에 비유 하 는 것 이 더 적절 한 것 같다.컴퓨터 로 돌아 오 면 사용자 가 직접 직면 하 는 것 은 컴퓨터 하드웨어 가 아니 라 셸 입 니 다. 사용 자 는 명령 을 셸 에 게 알 린 다음 에 셸 은 시스템 커 널 에 전송 하고 커 널 은 컴퓨터 하드웨어 를 지배 하여 각종 조작 을 수행 합 니 다.
시험 환경 은 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
세 개의 작은 스 크 립 트 의 요약:
위의 세 가지 간단 한 스 크 립 트 를 통 해 우 리 는 셸 스 크 립 트 의 기본 적 인 프로 그래 밍 방향 을 대충 알 수 있 습 니 다. 그 중에서 특히 마지막 예 는 링크 파일, 소켓 파일 등 판단 을 추가 할 수 있 습 니 다. 한 마디 로 프로 그래 밍 에 있어 우 리 는 실천 을 많이 해 야 합 니 다. 비록 위의 예 는 비교적 간단 하지만 제 가 할 때 빈 칸 이 적 고 키워드 가 잘못 쓸 수 있 습 니 다.키 워드 를 적 게 쓰 는 현상 이 므 로 앞으로 우리 가 프로 그래 밍 할 때 세심 하고 냉정 하 게 하 는 등 좋 은 프로 그래 밍 습관 을 가 져 야 앞으로 의 업무 에서 효율 을 유지 할 수 있 습 니 다 ^ ^.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.