저는 bash 스크립팅을 처음 접했습니다. 여러 컴퓨터에 ping을 보내는 스크립트가 있습니다. "I"는 다음과 같이 썼습니다.
for var in "$@"
do
ping -c 1 -W 2 "$var" > /dev/null
echo $var = $?
done
내가 하고 싶은 것은 유사한 이름을 가진 여러 컴퓨터를 핑하기 위한 입력으로 단일 글로브를 허용하는 것입니다.
예: pingall machine[:01-06:]
하지만 이것을 구현하는 방법을 모르겠습니다.
답변1
와일드카드다른 이름이다파일 이름 생성또는경로명 확장.
이는 쉘 와일드카드를 일치하는 파일 목록으로 변환하는 프로세스입니다. 그것은 단지 사용될 수 있습니다기존의문서.
여기서 대신 중괄호 확장을 사용할 수 있습니다.
pingall machine{01..06}
쉘은 해당 이름의 파일이 현재 디렉토리에 있는지 여부에 관계없이(와일드카드 아님) 단일 인수 로 확장 됩니다 machine01
.machine02
machine06
이 구문은 zsh
최신 버전의 .bash
yash -o braceexpand
을 사용하려면 ksh93
다음을 사용할 수 있습니다.
pingall machine{1..6%02d}
이 특별한 경우에는 다음을 사용할 수도 있습니다.
pingall machine0{1..6}
GNU seq
명령을 사용하면 다음을 수행할 수도 있습니다(기본값은 이라고 가정 $IFS
).
pingall $(seq -f machine%02.0f 6)
답변2
패턴은 파일 이름과 일치하는 경우에만 확장됩니다. 대신 중괄호 확장을 사용할 수 있을까요? 스크립트 실행
pingall machine0{1..6}
이는 다음으로 확장됩니다.
pingall machine01 machine02 machine03 machine04 machine05 machine06