내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
if command
then
command
fi
if
명령문은 다른 프로그래밍 언어인 bash와 다릅니다.if
성명서는직접 실행if
다음 명령
fi
로직 제어 종료if command
then
command
else
command
fi
if command
then
command
elif command
then
command
fi
if-else
나뭇가지case "变量" in
值1)
命令
;;
值2)
命令2
;;
*)
命令
#!/bin/bash
FreeMem=`free -m | awk 'NR==2 {print $NF}'`
CHARS="Current memory is $FreeMem"
if [ "$FreeMem" -lt 16000 ]
then
echo $CHARS
echo "内存不足,抓紧维护服务器!"
fi
#!/bin/bash
a=$1
b=$2
if [ $a -lt $b ]
then
echo "Yes, $a less than $b"
exit 0
fi
if [ $a -eq $b ]
then
echo "Yes, $a equal $b"
exit 0
fi
if [ $a -gt $b ]
then
echo "Yes, $a greater than $b"
exit 0
fi
#!/bin/bash
a=$1
b=$2
if [ $a -lt $b ]
then
echo "Yes, $a less than $b"
exit 0
elif [ $a -eq $b ]
then
echo "Yes, $a equal $b"
exit 0
else [ $a -gt $b ]
echo "Yes, $a greater than $b"
exit 0
fi
#!/bin/bash
if [ `netstat -tunlp | grep mysql | wc -l` -ge "1" ]
then
echo "MySQL is running"
else
echo "MySQL is stopped"
# systemctl start mysql.service
fi
#!/bin/bash
if [ "$#" -ne 1 ]
then
echo "Usage: $0 {start|stop|restart}"
exit 1
fi
if [ "$1" = "start" ]
then
/usr/bin/rsync --daemon
sleep 2
if [ `netstat -tunlp | grep rsync | wc -l` -ge 1 ]
then
echo "Rsync is started"
exit 0
fi
elif [ "$1" = "stop" ]
then
killall rsync &>/dev/null
sleep 2
if [ `netstat -tunlp | grep rsync | wc -l` -eq 0 ]
then
echo "Rsync is stopped"
exit 0
fi
elif [ "$1" = "restart" ]
then
kill rsync
sleep 1
killpro=`netstat -tunlp | grep rsync | wc -l`
/usr/bin/rsync --daemon
sleep 1
startpro=`netstat -tunlp | grep rsync | wc -l`
if [ "$killpro" -eq 0 -a "$startpro" -ge 1 ]
then
echo "Rsync is restarted"
exit 0
fi
else
echo "Usage: $0 {start|stop|restart}"
exit 1
fi
조건부 테스트에 일반적으로 사용되는 구문
일반적으로 사용되는 문자열 테스트 연산자
수치 비교
논리 연산자
각 명령어 비교표
test
명령의 가장 짧은 정의는 다음과 같습니다.표현식 평가
$?
값파일명에 대해유형 감지(존재 여부), 예:test -e filename
매개변수 | 중요성 |
---|---|
-e | 파일 이름이 존재합니까? |
-f | 파일명이 파일(file ) |
-d | 파일 이름이 디렉터리인지 여부(directory ) |
-b | 파일명이요block device 장치 |
-c | 파일명이 a인가요?character device 장치 |
-S | 파일명이 a인가요?Socket 문서 |
-p | 파일명이 FIFO(파일) 파일인지 여부 |
-L | 파일명이 연결파일인지 여부 |
파일 정보권한 감지,좋다:test -r filename
매개변수 | 중요성 |
---|---|
-r | 파일 이름에읽을 수 있는속성 |
-w | 파일 이름에쓰기 가능속성 |
-x | 파일 이름에실행 가능속성 |
-u | 파일 이름에수이드속성 |
-g | 파일 이름에SGID속성 |
-k | 파일 이름에끈적끈적한 비트속성 |
-s | 파일명이요비어 있지 않은 파일 |
~에 대한두 파일 간의 비교,좋다:test file1 -nt file2
매개변수 | 중요성 |
---|---|
-nt | (보다 최신), 판사file1 그것보다 나은가?file2 새로운 |
-ot | (보다 나이가 많은), 판사file1 그것보다 나은가?file2 오래된 |
-ef | 판사file1 그리고file2 동일한 파일이더라도 다음에서 사용할 수 있습니다.하드 링크의 판단에가장 중요한 것은 두 파일이 동일한 파일을 가리키는지 확인하는 것입니다. inode |
~에 대한두 정수 중에서 결정하기,좋다:test num1 -eq num2
매개변수 | 중요성 |
---|---|
-eq | 두 숫자는 같습니다 |
-ne | 두 숫자가 같지 않습니다. |
-gt | num1 그 이상num2 |
-lt | num1 미만num2 |
-ge | num1 크거나 같음num2 |
-le | num1 보다 작거나 같음num2 |
결정문자열 데이터
매개변수 | 중요성 |
---|---|
-z | 빈 문자열이면 반환true |
-n | 빈 문자열이 아닌 경우true |
= | str1 == str2 , 그런 다음 반환true |
!= | str1 != str2 , 그런 다음 반환true |
다중 조건부 판단,좋다:test -r filename -a -x filename
매개변수 | 중요성 |
---|---|
-a | (및) 두 가지 상황이 동시에 설정됩니다. |
-o | (또는) 두 가지 상황 중 하나가 참입니다. |
! | 논리적 부정 |
[]
test
그리고[]
효과는 동일합니다[]
두 기호는 왼쪽과 오른쪽에 공백으로 구분되어야 합니다.[ "a" = "b" ]
> <
다음과 같이 작성해야 합니다.> /<
탈출하다[]
중간 문자열 또는${}
변수를 최대한 활용하라""
값에 대한 정의되지 않은 참조를 방지하기 위해 큰따옴표로 묶습니다.[ -n "$filename" ]
[]
다음에서 사용할 수 있습니다.-a -o
논리 연산 수행, 지원되지 않음&& ||
[]
bash 내장 명령입니다[[]]
두 기호는 왼쪽과 오른쪽에 공백으로 구분되어야 합니다.[[ "a" = "b" ]]
> <
, 탈출 할 필요가 없습니다[[]]
중간 문자열 또는${}
변수를 최대한 활용하라""
큰따옴표로 묶음 ""
큰따옴표로 묶인 경우 패턴 및 메타문자 일치가 수행됩니다.[[]]
내부적으로 사용할 수 있습니다.&& ||
논리 연산 수행[[]]
bash의 키워드입니다[[]]
그 외 사용법은 동일[]
같은#!/bin/bash
read -p "Pls input a char:> " var1
[ "${var1}" -eq 1 ] && {
echo ${var1}
exit 0
}
[ "$var1" -eq 2 ] && {
echo $var1
exit 0
}
[ "$var1" -ne "1" -a "$var1" -ne "2" ] && {
echo "Script Error"
exit 1
}
#!/bin/bash
path=/scripts
[ ! -d "$path" ] && mkdir -p scripts
cat << END
1.[install lamp]
2.[install inmp]
3.[exit]
END
read -p "Pls input your choice:> " num
# 判断输入是否合法
[[ ! $num =~ [1-3] ]] && {
echo "The num you input must be in {1|2|3}"
echo "Input Error"
exit 1
}
[ $num -eq 1 ] && {
echo "start installing lamp...waiting..."
sleep 2
# 如果该脚本没权限
[ ! -x "$path/lamp.sh" ] || {
echo "The file does not exit or can't be exec"
exit 2
}
# 安装脚本
source ${path}/lamp.sh
exit $?
}
[ $num -eq 2 ] && {
echo "start installing lnmp...waiting..."
sleep 2
[ ! -x "$path/lnmp.sh" ] || {
echo "The file does not exit or can't be exec"
exit 3
}
source ${path}/lnmp.sh
exit $?
}
[ $num -eq 3 ] && {
echo "Bye~"
exit 4
}
for var in list
do
commands
done
for (( i=1;i<=10;i++ ))
do
echo "The next number is $i"
done
문법: 여기test command
그리고if-else
명령문 형식은 동일하며 모든 bash 명령을 사용할 수 있습니다.
while
~의test command
종료 상태 코드는 루프의 명령으로 변경되어야 합니다. 그렇지 않으면 상태 코드가 변경되지 않으면 루프가 계속됩니다.while test command
do
commands
done
while
주문하다여러 테스트 명령을 작성할 수 있습니다.
var1=10
while echo $var1
[ $var1 -ge 0 ]
do
echo "This is inside the loop"
var1=$[ $var1 -1 ]
done
until
그리고while
예반대 의미,until
이 명령을 사용하려면 다음을 지정해야 합니다.0이 아닌 종료 코드를 반환하는 테스트 명령
until test commands
do
other commands
done
until
또한여러 테스트 명령 지원, 마지막 명령만이 bash가 다른 명령을 실행하는지 여부를 결정합니다.until echo $var1
[ $var1 -eq 0 ]
do
echo "Inside the loop:$var1"
var1=$[ $var1 - 25 ]
done
break
가장 많은 메모리 루프가 자동으로 종료됩니다.n
점프할 루프 레벨을 나타냅니다. 기본값은 1이고 다음 레벨은 2입니다.break n
for (( a = 1;a<10;a++ ))
do
echo "The number is $a"
done > test.txt
echo "Finished"