안녕하세요, IP 파일과 이름을 전달하여 여러 노드로 부팅하려고 합니다. 아래는 내 코드입니다
출력: ip.txt 파일에서 IP를 가져와야 하며 name.txt 파일에서 이름을 가져와야 합니다.
IP=`cat ip.txt`
USER="ubuntu"
KEY="test.pem"
NAME=`cat name.txt`
for ip in $IP; do
knife bootstrap $ip -ssh-port 22 --ssh-user $USER --sudo --i $KEY --no-host-key-verify -N $NAME --run-list "role[webserver]"
done
exit $?
답변1
#!/bin/bash
# Read ip.txt and names.txt into arrays 'ips' and 'names'. This assumes that
# the files have the same number of lines, and that both files are in the
# correct order (i.e. line N of ip.txt corresponds to line N of name.txt),
# so that the indices for both arrays match.
mapfile -t ips < ip.txt
mapfile -t names < name.txt
# Don't use all-caps variable names in your own scripts, they're probably already
# used by other programs. $USER certainly is. Use lowercase variable names.
user="ubuntu"
key="test.pem"
for i in "${!ips[@]}"; do
knife bootstrap "${ips[$i]}" -ssh-port 22 \
--ssh-user "$user" --sudo --i "$key" \
--no-host-key-verify -N "${names[$i]}" --run-list "role[webserver]"
done
참고: 내장되어 mapfile
있습니다 . bash
의 동의어입니다 readarray
.
또한 참고: 저는 여기서 이것을 실행하지 않으므로 귀하의 명령이 원하는 대로 작동하는지 chef
알 수 없습니다 . knife bootstrap
구문이 정확하고 적절한 옵션을 사용했다고 가정합니다.
답변2
최신 스크립팅 사용세게 때리다:
ip=$(< ip.txt)
user="ubuntu"
key="test.pem"
name=$(< name.txt)
for i in $ip; do
knife bootstrap $i -ssh-port 22 \
--ssh-user $user --sudo --i $key \
--no-host-key-verify -N $name --run-list "role[webserver]"
done
그것이 무엇인지 잘 모르겠습니다
"role[webserver]"
연관 배열의 값인 경우 다음과 같이 작성해야 합니다.
"${role[webserver]}"
답변3
실제로 두 개의 서로 다른 파일에서 $IP 및 $NAME을 전달하여 다음 형식으로 출력을 얻으려고 합니다.
1.1.1.1 웹사이트 1
2.2.2.2 웹페이지 2
3.3.3.3 웹페이지 3