셸 script 입문 축적
1.셸 스 크 립 트,한 줄 에 여러 명령 을 쓸 수 있 지만 명령 사이 에 사용 해 야 합 니 다.한 줄 에 명령 만 쓰 면 쓰 지 않 아 도 됩 니 다....하면 된다
셸 변수 전체: 세 가지 로 나 뉜 다:일반적인 변수 환경 변수 특수 위치의 변수:URL 셸 변수 전체:http://zccst.iteye.com/blog/1135109
export 변수/etc/profile ~/.bash_profile ~/.bashrc
http://blog.sina.com.cn/s/blog_67146a750100y6zr.html
http://linux.chinaunix.net/doc/system/2005-02-03/1084.shtml
2. 테스트 명령
[ -d DIR ]
만약
DIR
존재 하고 디 렉 터 리 가 있다 면 정말 입 니 다.[ -f FILE ]
[ -s FILE ]
[ -z FILE ]
만약 에
FILE
존재 하고 일반 파일 이 진실 이 라면 FILE 파일 이 비어 있 지 않 으 면 파일 에 데이터 가 있 으 면 진실 입 니 다.만약 에 FILE 파일 이 비어 있 으 면 파일 에 데이터 가 없 으 면 진실 입 니 다.[ -z STRING ]
길이 가 0 이면 진짜 입 니 다.
STRING
길이 가 0 이 아니면 진짜 입 니 다.
[ -n STRING ]
두 문자열 이 같 으 면 진짜 입 니 다.
STRING
문자열 이 다 르 면 진짜 입 니 다.
[ STRING1 = STRING2 ]
4.567914.와 4.567914.정수 또는 수치 가 정수 인 변수 여야 한다.
정수,문자열 비교 형식:
http://www.cnblogs.com/happyhotty/articles/2065412.html
C 언어 와 유사 하고 테스트 조건 간 에 비 논리 적 연산 도 할 수 있 습 니 다.
[ STRING1 != STRING2 ]
4.567914.위 표 의 임 의 테스트 조건 이 될 수 있 습 니 다!논리
[ ARG1 OP ARG2 ]
4.567914.와 4.567914.위 표 의 임 의 테스트 조건 일 수 있 습 니 다.4.567914.논리 와
ARG1
4.567914.와 4.567914.위 표 의 임 의 테스트 조건 일 수 있 습 니 다.4.567914.논리 또는
2.if/elseif/else 형식
#!/bin/bash
name=$1
if [ $name = "shuming" ];then
echo "hello,shuming"
elif [ $name = "caohong" ]; then
echo "hello,caohong"
else
echo "hello,erverone"
fi
(1) if [ 사이빈 칸 분리,그렇지 않 으 면 문법 오류 가 발생 할 수 있 습 니 다.
(2) elif ----->elseif 아니에요.
(3)]then 사이 에 사용 하기;칸 막 이
(4)반드시 fi if 구조의 끝 을 표시 합 니 다.
(5)크기 비교[]주의사항:양쪽 칸 띄 우기,-eq-ne -gt -lt -ge -le
if else 형식 도&&로 구현 할 수 있 습 니 다.command 1&command 2 는 command 1 이 성공 적 으로 실 행 된 후에 만 command 2 를 실행 할 수 있 습 니 다.
test "$(whoami)" != "root" && echo "it is net root running!"
whoami 가 root 라면 뒤의 문 구 를 실행 하지 않 습 니 다.
#/bin/bash
kfc_proc_count=`ps -u ads|grep kfc|wc -l`;
disp_proc_count=`ps -u ads|grep dispatch|wc -l`;
ret=`ps aux|grep ads|grep -v grep|grep dispatch`;
ret_wc=`ps aux|grep ads|grep -v grep|grep dispatch|wc -l`;
isbindip=`/sbin/ifconfig|grep 172.24.130.33|wc -l`;
ismain=`echo $ret|grep main|wc -l`; ---->echo cat
isext=`echo $ret|grep ext|wc -l`;
if [ $kfc_proc_count = 1 ] && [ $disp_proc_count = 1 ];then ---> && ||
if [ $ismain = 1 ] && [ $isbindip = 1 ]; then
main_ext_OK=1;
elif [ $isext = 1 ] && [ $isbindip = 0 ]; then
main_ext_OK=1;
else
main_ext_OK=0;
fi
else
main_ext_OK=0;
fi
if [ -f "$file" -a `cat $file 2>/dev/null|grep -v '^#'|grep "$key"|wc -l` -gt 0 ]; then
return 0
else
return 1
fi
3.case/esac 구조
case 명령 은 C 의 switch/case 문 구 를 유추 할 수 있 으 며,esac 는 case 문장의 끝 을 나타 낸다.C 언어의 case 는 정형 이나 문자 형 상수 표현 식 만 일치 할 수 있 고 셸 스 크 립 트 의 case 는 문자열 과 Wildcard 를 일치 시 킬 수 있 습 니 다.각 일치 하 는 지점 마다 몇 가지 명령 이 있 을 수 있 으 며 끝 은 반드시 있어 야 합 니 다. 끝 났 습 니 다.실행 할 때 첫 번 째 일치 하 는 가 지 를 찾 아 해당 하 는 명령 을 실행 한 다음 에 esac 로 바로 이동 한 후에 C 언어 처럼 break 에서 뛰 어 나 올 필요 가 없습니다.
#!/bin/bash
echo "Is it morning? Please answer yes or no."
read yes_or_no
case "$yes_or_no" in
yes|y|YES|Y)
echo "Good morning";;
[nN]*)
echo "Good afternon";;
*)
echo "It is error"
esac
(1)case 변수
(2)대응 하 는 값) 괄호 가 반 개 밖 에 없어 요.
(3)각 분기 대응 명령 뒤 에는;칸 막 이,마지막 으로 안 써!
(4)esac 종료 case 문장
#!/bin/bash
case $1 in
start)
echo "start the process of apache"
echo "ok,start";;
stop)
echo "stop the process of apache";;
restart)
echo "restart the process of apache";;
reload|force-reload)
echo "reload the configfile";;
*)
echo "It is error"
esac
4. for/do/done 순환 하 다.
4
#!/bin/bash
for var in cao shu ming
do
echo "I like $var"
echo "Hello everyone"
done
(1)var 는 변수(스스로 설정 하면 됩 니 다)이 고 in 다음은 문자 직렬 입 니 다.(2) do ------done
인쇄 결과:
[[email protected] ~]$ ./shuming.sh I like shuming Hello everyone I like caohong Hello everyone I like liuchao Hello everyone
문자열 줄 이 반드시 일련의 문자열 을 누적 하 는 것 이 아니 라 다른 명령 의 결과 일 수 있 습 니 다.
for 순환 용법 대전:http://hi.baidu.com/plp_cm/blog/item/d828d1881b05e2faf11f3607.html
4.while/do/done 구조
#!/bin/bash
for var in $(awk -F: '{print $1}' /home/caoshuming.pt/t.txt)
do
echo "I like $var"
echo "Hello everyone"
done
(1) do done 구조(2) 판단 조건 [ ***** ]
#!/bin/bash
num=0
while [ $num -ne 10 ]
do
echo "please inter number"
read num
done
echo "the num is 10"
파일 t.txt 의 데 이 터 를 읽 고 모든 행동 기준 으로:[[email protected] ~]$ ./shuming.sh dkdkjfafja aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbb cccccccccccccccccc eeeeeeeeeeeeeeeeee
5.함수 구조
#!/bin/bash
2 while read line
3 do
4 echo $line
5 done < t.txt
(1)함 수 는 먼저 정의 한 후에 호출 해 야 한다.(2)함수 안의$1$2 는 함수 뒤의 매개 변 수 를 호출 하 는 것 입 니 다.$1$2 는 함수 내부 에서 외부 매개 변수 에 영향 을 주지 않 습 니 다.
(3)만약{ 명령 과 한 줄 에 있 으 면 빈 칸 으로 구분 하고 여러 명령 을 같은 줄 에 사용 해 야 합 니 다.분리 하고 마지막 명령 이}과 같은 줄 에 있 으 면 명령 뒤에 추가 합 니 다.
(4).함수 직접 호출 isdirectory "dir" 반환 값 이 반환 값 을 설정 하면 정수 a=$? 반환 값 을 가 져 오 면 됩 니 다.
(5). exit 0 스 크 립 트 추출 모든.sh 의 실행 을 끝 냅 니 다.
6.파일,디 렉 터 리 존재 여부 판단
#/bin/bash
is_directory()
{
DIR_NAME=$1
if [ ! -d $DIR_NAME ]; then
return 1
else
return 0
fi
}
for DIR in "$@"; do
if is_directory "$DIR"
then :
else
echo "$DIR doesn't exist. Creating it now..."
mkdir $DIR > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Cannot create directory $DIR"
exit 1
fi
fi
done
3.일반 파일 은 [ -f $file ] 경 로 는[-d path] 파일 이 든 경로 든 존재 여 부 를 판단 하 는 것 이 라면-e 매개 변수 로 [ -e /.../ ]
#!/bin/sh
myPath="/var/log/httpd/"
myFile="/var /log/httpd/access.log"
# -x $myPath
if [ ! -x "$myPath"]; then
mkdir "$myPath"
fi
# -d $myPath
if [ ! -d "$myPath"]; then
mkdir "$myPath"
fi
# -f $myFile
if [ ! -f "$myFile" ]; then
touch "$myFile"
fi
# -n,-n
if [ ! -n "$myVar" ]; then
echo "$myVar is empty"
exit 0
fi
#
if [ "$var1" = "$var2" ]; then
echo '$var1 eq $var2'
else
echo '$var1 not eq $var2'
fi
그 중에서 주의해 야 할 것 은 eval 의 용법:eval 의 기능 은 명령 을 실행 하기 전에 먼저 명령 을 스 캔 하여 진행 하 는 것 입 니 다.
모든 교체,eval 은 한 번 의 스 캔 으로 완전히 교체 할 수 없 는 상황 에서 eval 은 두 번 의 스 캔 을 통 해 명령 의 변수 와 다른 직접 사용 하지 않 는 변 수 를 모두 교체 할 수 있 도록 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 파일 압축 및 압축 풀기파일 의 간단 한 압축 과 압축 해 제 를 실현 하 였 다.주요 테스트 용 에는 급 하 게 쓸 수 있 는 부분 이 있 으 니 불편 한 점 이 있 으 면 아낌없이 가르쳐 주 십시오. 1. 중국어 문 제 를 해 결 했 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.