그 후 bash
나는 다음을 수행했습니다. 이 표현식은 Redhat 버전이 7.5인지 7.6인지 if
계산합니다 .true
if [[ ` cat /etc/redhat-release | awk '{print $7}' ` == "7.5" ]] || [[ ` cat /etc/redhat-release | awk '{print $7}' ` == "7.6" ]]
then
.
.
.
정규식을 사용하여 더 우아한 방법으로 이 작업을 수행할 수 있습니까?
이는 다음과 같습니다 /etc/redhat-release
.
cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.6 (Maipo)
답변1
릴리스 문자열을 직접 확인하는 것이 훨씬 간단합니다.
if grep -q 'release 7\.[56] ' /etc/redhat-release
then ...
이 grep
명령은 정규식을 통해 일치를 수행합니다. 원자 [56]
일치 5
또는 6
, 패턴 일치 허용 7.5
또는 7.6
. .
게임 이후로모든 문자문자 그대로의 점과 일치하도록 백슬래시로 이스케이프 처리했습니다. 후행 공백은 일치하는 버전 문자열 뒤에 다른 문자가 오지 않도록 합니다.
답변2
bash
내장된 문자열 일치를 사용하여 이를 수행 할 수 있습니다 . 이는 정규식이 아닌 glob(와일드카드) 패턴을 사용한다는 점에 유의하세요.
if [[ $(cat /etc/redhat-release | awk '{print $7}') == 7.[56] ]]
아니면 우리는 제거우루크:
if [[ $(awk '{print $7}' /etc/redhat-release) == 7.[56] ]]
또는...
if [[ $(cat /etc/redhat-release) == *" release 7."[56]" "* ]]
심지어 (@kojiro 덕분에)…
if [[ $(< /etc/redhat-release) == *" release 7."[56]" "* ]]
(전체 줄과 일치하도록 시작과 끝 부분에 와일드카드를 사용해야 합니다. 숫자 뒤에 인용된 공백은 실수로 "7.50"과 일치하지 않도록 하기 위한 것입니다.)
또는 정말로 정규식을 사용하고 싶다면 =~
RE 구문을 사용하고 전환하세요.
if [[ $(< /etc/redhat-release) =~ " release 7."[56]" " ]]
(따옴표 안의 부분은 문자 그대로 일치하므로 .
이스케이프나 괄호 안은 필요하지 않습니다(호환성을 활성화하지 않는 한 bash31
). RE 일치는 기본적으로 고정되지 않으므로 마지막 콘텐츠에는 필요하지 않습니다. 마지막과 같은).
답변3
awk
cat
sum의 모든 작업은 여기에서 수행할 수 있습니다 [[...]]
.
if
</etc/redhat-release awk -v ret=1 '
$7 ~ /^7\.[56]$/ {ret=0}
END {exit(ret)}'
then
...
아니면 표준 sh
구문과 간단한 와일드카드 패턴 일치를 사용하세요.
case $(cat /etc/redhat-release) in
(*'release 7.'[56]' '*) ...;;
(*) ...;;
esac
답변4
Bash를 사용하여 한 줄의 7번째 필드를 추출할 수 read
있으며 이러한 "/etc/*-release" 유형 파일은 어쨌든 한 줄인 경향이 있습니다. 고려하다
read _ _ _ _ _ _ ver _ < /etc/redhat-release
if [[ $ver = 7.[56] ]]; then
# match
fi