자주 사용 하 는 셸 스 크 립 트 명령 과 용법

5829 단어 linux
$\#: 명령 행 매개 변수 개수
$*: 모든 인자 대표
$n: n 번 째 인자
$?:마지막 명령 반환 값 을 대표 합 니 다.
$$: 현재 셸 을 나타 내 는 프로 세 스 번호 PID
$는 변수의 인용 부호 입 니 다
 
= 가장 기본 적 인 할당
: = 덮어 쓰기 전의 값 입 니 다
?= 네, 할당 되 지 않 으 면 등호 뒤의 값 을 부여 합 니 다.
+ = 등호 뒤의 값 을 추가 합 니 다.
 
선언://정의 변수
declare - a array//배열
declare - i sum = 10 + 20//정형
declare - x var/환경 변수 로 정의
declare - r var = 456//읽 기 전용 변수 로 unset 을 사용 할 수 없습니다.
 
read 명령:/키보드 에서 데 이 터 를 읽 고 변 수 를 부여 합 니 다.
- x read 시 스 크 립 트 실행 과정 표시 (디 버 깅 용) 스 크 립 트 실행 시 추가 - x
- t read - t 2 tmp 2 초 시간 초과
- n read - n 3 tmp 읽 기 3 글자 자동 되 돌려 주기
-p read -p "please input "<<====> echo -n "please input : "
- s read - p "please input:"- s passwd 암호 로 읽 기
의사 코드 용례
declare -i score //定义一个变量

read -p "input a int score:" score

 
echo 명령
echo - n "hello world"리 턴 부 호 를 출력 하지 않 습 니 다.
echo - e "\033 [31mking\\033 [0m"터미널 제어 코드 명령 m 색상 속성 30 - 37 전경 색 40 - 47 배경 색 지원
\033 [0m 기본 색상 속성 회복
\033 [45; 36m 설정 배경 45 전경 36
"\033 [y; xH\033 [10; 25h"커서 를 10 줄 25 열 에 놓 습 니 다.
\033 [K 커서 줄 내용 지우 기
\033 [u 커서 위치 복원
\033 [s 현재 커서 위치 저장
 
test
//파일 존재 여부 판단 - e 존재 여부 - f 가 일반 파일 인지 - d 가 디 렉 터 리 인지 - s 가 비어 있 지 않 은 파일 인지 - p 가 파이프 파일 인지 - b 가 블록 장치 파일 인지 - c 가 문자 장치 파일 인지 - L 가 소프트 링크 인지 - S 소켓 파일 인지
//파일 권한 과 관련 된 판단 - r 읽 을 수 있 는 권한 이 있 는 지 - w 쓸 수 있 는 권한 이 있 는 지 - x 실행 가능 한 권한 이 있 는 지 - u 특권 비트 가 있 는 지 - g 그룹 특 권 위치 가 있 는 지 - k 에 t 비트 가 있 는 지, 즉 붙 여 넣 기 위치
//두 파일 의 비교 판단 - nt 비교 file 1 대 file 2 새 - ot 비교 file 1 대 file 2 옛 - ef 비교 file 1 과 file 2 가 같은 파일 인지, 하 드 링크 를 판단 하 는 데 사 용 됩 니 다.
//정수 간 의 크기 판단 - eq 가 같 음 - ne 은 - lt 가 - ge 보다 크 면 - lt 보다 작 음 - le 보다 작 음
//문자열 간 의 판단 - z 가 빈 문자열 인지 - n 이 비 어 있 는 문자열 인 지 str 1 = str 2 가 같은 지 str 1! = str 2 가 다른 지 test - d file 테스트 디 렉 터 리 test - e file 에 test - s file 파일 크기 가 0 이 아 닌 지 여부
//다 중 조건 판단 - a 두 가지 조건 을 동시에 만족 시 키 면 진실 이 고, and - o 두 가지 조건 이 그 하 나 를 만족 시 키 면 진실 이 며, or 에 해당 한다.
 
(()) 또한 test 와 마찬가지 로 비교 기 호 를 직접 사용 하여 C 언어 형식 을 지원 할 수 있다 고 판단 할 수 있다.
 
 
regular 변수의 특수 한 참조 및 처리 방법
$var 는 var 변수의 값 을 참조 합 니 다 ${var} var 변수의 값 을 참조 합 니 다 ${var% a *} var 변수의 값 을 참조 하고 a 왼쪽 문자열 을 캡 처 합 니 다. 문자열 에 a 가 여러 개 있 으 면 왼쪽 에서 오른쪽으로 마지막 a 를 누 르 면 ${var% a *} var 변수의 값 을 참조 하고 a 왼쪽 문자열 을 캡 처 합 니 다. 문자열 에 a 가 여러 개 있 으 면 왼쪽 에서 오른쪽으로 첫 번 째 a 를 누 르 면 ${var\# * a} 을 캡 처 합 니 다.var 변수의 값 을 참조 하고 a 오른쪽 문자열 을 캡 처 합 니 다. 문자열 에 a 가 여러 개 있 으 면 왼쪽 에서 오른쪽으로 첫 번 째 a 에 따라 ${var\# * a} var 변수의 값 을 캡 처 하고 a 오른쪽 문자열 을 캡 처 합 니 다. 문자열 에 a 가 여러 개 있 으 면 왼쪽 에서 오른쪽으로 마지막 a 에 따라 ${var: 3} var 변수의 값 을 참조 하고 세 번 째 문자 부터 ${var: 3: 6} 을 캡 처 합 니 다.var 변수의 값 을 참조 하고 세 번 째 문자 부터 캡 처 합 니 다. 6 개의 문 자 를 캡 처 하여 ${\# var} 을 표시 합 니 다. var 변수 값 의 길이 ${var/a/b} 을 변수 값 으로 바 꾸 는 문자열 입 니 다. 여 기 는 var 변수 값 의 a 를 b 로 바 꾸 는 것 입 니 다. 여러 개의 a 가 있 으 면 ${var/a/b} 변수 값 을 바 꾸 는 문자열 만 바 꿀 수 있 습 니 다. 여기 서 var 변수 값 의 a 를 모두 b 로 바 꿉 니 다.
if 의 다양한 형식
if test 6 - eq 5 - a 7 - gt 8if [6 - eq 5] & & [7 - gt 8] if [6 - eq 6 - a 9 - gt 8] if test 6 - eq 5if ((((6 = = = 5)) if test $score - lt 0 - o $score - lt//100 0 0 보다 작 거나 100 이상
 
 
사용법:
변수의 길 이 를 구하 다
 
len=${#num}

문자열 길이 구하 기
    expr length "this is a test" 

    

    14//출력
 
디지털 상수 모드 연산
expr 14 % 9

    5//출력
 
위치 에서 문자열 캡 처
expr substr "this is a test" 3 5 //遇到空格停止

     is is//출력
 
숫자 문자열 only the first character 문자 e 가 처음으로 문자열 의 위치 에 나 타 났 습 니 다.
expr index "testforthegame" e

    2//출력
 
1000 이내 의 난수 가 발생 하 다
num=$(($RANDOM % 1000))

 
정수 인지 확인
expr $num + 100 &> /dev/null //不显示任何东西
if [ $? -ne 0 ]
then
    echo "input error!"
    exit 1
fi

 
사용자 존재 여부 확인
#!/bin/bash



if [ $? -ne 0 ]

then

  echo "user nonexistent"

  exit 1

fi

echo "$uid"

exit 0



#-n表示位数

read -p "input a key:" :-n 1 key

 
어떤 파일 이 존재 하 는 지 판단 하고, 존재 하 는 경우 빈 파일 인지 판단 하 며, 비어 있 으 면 삭 제 됩 니 다.
#./xxx.sh /var/ftp/pub/ttt.txt
if [ $# -ne 1 ]
then
    echo -e "\033[31muse:$0 filePath\033[0m"
    exit 1
fi
#是否存在 '!'取假
fname=$1
if ! test -e $fname
then
    echo -e "\033[31m$fname is not exist\033[0m"
    exit 2
fi
#判度是否为普通文件
if [ -f $fname ] #if test -f $fname
then
#判断是否为空文件
if ! test -s $fname
then
    rm -rf $fname
if [ $? -eq 0 ]
then
    echo "$fname is empty file,del..."
fi
fi
else
    echo "is not file!!!"
fi

exit 0

 
IP 를 입력 하고 통신 이 가능 한 지 테스트 합 니 다. YES 를 인쇄 할 수 있다 면 NO
read -p "input a ip:" ip
#检查IP是否合法
ping -c 1 $ip &> /dev/null
if [ $? -eq 0 ]
then
    echo "Yes."
else
    echo "NO."
fi

 
입력 이 숫자 인지 확인
read -p "input a int number:" num
len=${#num}
for i in $(seq 0 $((len-1)))
do
n=${num:$i:1}
case $n in
[[:digit:]])
;;
*)
echo "input error!!!"
exit 1
;;
esac

done

 
현재 디 렉 터 리 의 모든. txt 파일 을. doc 로 변경 합 니 다.
#!/bin/bash

FILES='ls ./*.txt'

for txt in $FILES

do

     doc='echo $txt | sed "s/.txt/.doc"'

     mv  $txt  $doc

done

 
셸 프로그램 을 설계 하여/etc 디 렉 터 리 의 모든 내용 을 백업 하고 압축 하여/root/bak 디 렉 터 리 에 저장 하고 파일 이름 은 다음 과 같은 형식 yymmd etc, yy 는 년,\# mm 는 월, dd 는 일 입 니 다.
#! /bin/bash

DIRNAME='ls /root| grep bak'

if [ -z "$DIRNAME" ]

then

    mkdir /root/bak

    cd /root/bak

fi

YY='date % y'

MM='date % m'

DD='date % d'

BACKETC=$YY$MM$DD_etc.tar.gz

tar -zcvf $BACKETC /etc

echo "finished!"

 

좋은 웹페이지 즐겨찾기