Linux 셸 지식 집합

6864 단어
실제로 셸 은 사용자 가 입력 한 명령 을 설명 하고 커 널 로 보 내 는 명령 해석 기 입 니 다.뿐만 아니 라 셸 은 명령 을 편집 하 는 데 사용 할 프로 그래 밍 언어 가 있 습 니 다. 셸 명령 으로 구 성 된 프로그램 을 만 들 수 있 습 니 다.Shell 프로 그래 밍 언어 는 일반 프로 그래 밍 언어의 많은 특징 을 가지 고 있 습 니 다. 예 를 들 어 순환 구조 와 분기 제어 구조 등 도 있 습 니 다. 이런 프로 그래 밍 언어 로 작 성 된 Shell 프로그램 은 다른 프로그램 과 똑 같은 효 과 를 가 집 니 다.
머리말
SHELL 은 몇 가지 문 제 를 처리 할 때 독특한 장점 을 가지 고 빠 르 고 편리 하 며 배 웠 을 때 자랑 도 할 수 있 습 니 다. 물론 셸 의 문법 은 아버 지 를 속 일 수 있 습 니 다. 체계 적 으로 배 운 적 이 없고 조금씩 쌓 일 수 밖 에 없습니다.
오늘 이것 은 데이터베이스 데 이 터 를 새로 고 치 는 스 크 립 트 를 실현 할 때 만 나 는 지식 점 입 니 다. 새로 고 칠 때 정규 일치, 수학 연산, 비교 등 을 사 용 했 습 니 다.
셸 의 배열
배열 정의

arr=(1 2 3 4 5)
arr=(    yrt lulu yanruitao)
arr=('^[0-9]+$' '^yrt\.(\d+)\.log$')
arr=(
 "   " \
  "yanruitao" \
  "today is a good day!"
)

배열 의 사용

len=${#arr[@]} #           
echo ${arr[0]} #         ,            ,   0  
echo ${arr[2]} #     3   

실제 의 예

[yanruitao@boss_runtime sh]$ arr=(
> "   "
> "http:\/\/www\.baidu\.com\/(\d+)\.html"
> "yanruitao"
> "lulu"
> "yrt"
> )
[yanruitao@boss_runtime sh]$ echo ${#arr[@]}
5
[yanruitao@boss_runtime sh]$ echo ${arr[1]}
http:\/\/www\.baidu\.com\/(\d+)\.html
[yanruitao@boss_runtime sh]$ echo ${arr[0]}
   
[yanruitao@boss_runtime sh]$ echo ${arr[5]}

[yanruitao@boss_runtime sh]$


셸 의 크기 비교

#   (())
if((6 <8)); then echo "yes    "; fi #  ――yes    
if(($a>8)); then echo "yes    "; fi
if(($a<=$b)); then echo "yes    "; fi
#   [] [[]]
if [ 2 -gt 1 ]; then echo "iforever    "; fi
if [[ 'abc' > 'ab' ]]; then echo "iforever    "; fi #iforever    
if [[ 2 < 10 ]]; then echo "iforever    "; fi #   
if [[ 2 -lt 10 ]]; then echo "iforever    "; fi #iforever    

위의 이 몇 가 지 는 여전히 규칙 적 인 것 을 볼 수 있다.
두 개의 작은 괄호 [()] 안 에는 작은 괄호 보다 큰 것 을 직접 사용 하여 비교 할 수 있 고 (>, =), 그리고 '갱 부' 의 빈 칸 이 필요 하지 않 습 니 다. 수학 계산 서 에 괄호 ([]) 안 을 비교 할 때 - lt, - lt, - ne, - eq 등 연산 자 를 사용 해 야 합 니 다. 그리고 엄격 한 빈 칸 이 있어 야 합 니 다.
셸 의 괄호

#        ,    for    ,         
[yanruitao@boss_runtime ad]$ for((a=0;a<10;a++))
> do
> echo $a
> done
0
1
2
3
4
5
6
7
8
9

#     ++,         
[yanruitao@boss_runtime ad]$ i=1
[yanruitao@boss_runtime ad]$ echo $i
1
[yanruitao@boss_runtime ad]$ let i++
[yanruitao@boss_runtime ad]$ echo $i
2
[yanruitao@boss_runtime ad]$ ((i++))
[yanruitao@boss_runtime ad]$ echo $i
3

#    
[yanruitao@boss_runtime ad]$ echo 1+2
1+2
[yanruitao@boss_runtime ad]$ echo $((1+2))
3

#           ,            shell    ,                ,                 
[yanruitao@boss_runtime ad]$ a=1
[yanruitao@boss_runtime ad]$ (a=3;echo $a)
3
[yanruitao@boss_runtime ad]$ echo $a
1

#   and   
if [[ -n "$ret" && $ret -gt 123 ]]... #[[]]         &&,    -a
if [ -n "$ret" -a $ret -gt 123 ]...  #[]         -a,    &&
if(($ret)) && (($ret >123 ))...  #(())      && 


셸 함수 정의

function getId()
{
 local url=$1 #local     url          ,           
  ereg="http:\/\/www\.baidu\.com\/\([0-9]\+\)\.html"
  local ret=$(expr $url : $ereg)
  if [[ -n "$ret" && $ret -gt 0 ]]; then # ret null   []   ,-n           ,   $ret null ,     
   echo $ret
    return 0
  fi
  return 1
}
[yanruitao@boss_runtime sh]$ echo $?
0
[yanruitao@boss_runtime sh]$ getId "http://www.baidu.com/123.htl"
[yanruitao@boss_runtime sh]$ echo $?
1
[yanruitao@boss_runtime sh]$ getId "http://www.baidu.com/123.html"
123
[yanruitao@boss_runtime sh]$ echo $?
0  

함수 의 전체 형식 은 위의 예 와 같 습 니 다. 이 안 에는 두 가지 점 을 주의 하 십시오.
우선 반환 값 입 니 다. return 을 통 해 반환 값 은 정수 일 수 있 으 며 호출 이 끝 난 후에 echo $를 사용 하 시 겠 습 니까?반환 값 을 볼 수 있 습 니 다.값 을 부여 하 는 형식 을 사용 하려 면 ret = $(getId) 와 같은 echo 가 필요 합 니 다.http://www.baidu.com.1234.html") echo 의 값 만 ret 변수 에 전 달 됩 니 다.
잡다 한 지식 점
문자열 트랜스 퍼 그룹

[yanruitao@boss_runtime sh]$ str="    lulu yrt yanruitao"
[yanruitao@boss_runtime sh]$ arr=($str)  #             
[yanruitao@boss_runtime sh]$ echo ${arr[*]}
    lulu yrt yanruitao
[yanruitao@boss_runtime sh]$ echo ${#arr[@]}
4

상용 판단 표지 [- z STRING]  '스 트 링' 의 길 이 는 0 이면 진짜 다.  [ -n STRING ] or [ STRING ]  'STRING' 의 길 이 는 0 non - zero 가 아 닌 것 이 진실 이다.[ -d FILE ]  FILE 가 존재 하고 디 렉 터 리 가 있다 면 진실 입 니 다.[ -a FILE ]  FILE 가 존재 한다 면 진실 입 니 다.
링크 ux 배경 실행 관련

& #              ,            
./update.sh 100 500 &

ctrl + z #                ,        

jobs #           
jobs -l #           PID
[yanruitao@boss_runtime sh]$ jobs -l
[1]  9681 Running         ./t.sh 100 300 &
[2]  9683 Running         ./t.sh 100 300 &
[3]- 9685 Running         ./t.sh 100 300 &
[4]+ 9688 Running         ./t.sh 100 300 &

fg  #               ,             `fg %jobnumber`       
[yanruitao@boss_runtime sh]$ jobs -l
[2] 10033 Running         ./t.sh 100 300 &
[3] 10035 Running         ./t.sh 100 300 &
[4]- 10037 Running         ./t.sh 100 300 &
[5]+ 10039 Running         ./t.sh 100 300 &
[yanruitao@boss_runtime sh]$ fg %2
./t.sh 100 300  


bg  #                    。  ,       ,    bg %jobnumber
[yanruitao@boss_runtime sh]$ jobs -l
[1]- 11655 Running         ./t.sh 100 300 &
[2]+ 11662 Running         ./t.sh 100 300 &
[yanruitao@boss_runtime sh]$ fg %1
./t.sh 100 300
^Z
[1]+ Stopped         ./t.sh 100 300
[yanruitao@boss_runtime sh]$ jobs -l
[1]+ 11655 Stopped         ./t.sh 100 300
[2]- 11662 Running         ./t.sh 100 300 &
[yanruitao@boss_runtime sh]$ bg %1
[1]+ ./t.sh 100 300 &
[yanruitao@boss_runtime sh]$ jobs -l
[1]- 11655 Running         ./t.sh 100 300 &
[2]+ 11662 Running         ./t.sh 100 300 &

kill #    
kill %num #  jobs   job ,    
kill pid #         
ctrl + C #         

이상 에서 말 한 것 이 본 고의 모든 내용 입 니 다. 리 눅 스 셸 명령 을 숙지 하 는 데 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기