drupal에서 사용자 계정을 생성하기 위해 drush를 사용하는 for 루프 내에 while 루프가 있지만 시퀀스를 올바르게 반복하지 않습니다. 계정이나 모든 도메인을 생성하는 것은 잘 작동하지만 while 루프는 첫 번째 계정 이후에 사용자 역할을 생성하지 않습니다. 내 실수를 본 사람이 있나요?
#add the user
USERLIST=(
"$USER,page_creator"
#"$USER,layout_manager"
"$USER,page_reviewer"
"$USER,landing_page_creator"
"$USER,landing_page_reviewer"
"$USER,media_manager"
"$USER,block_creator"
#"$USER,site_builder"
"$USER,block_manager"
)
count=0
DOMAINLIST=("lmn" "pdq" "xyz")
for SITE in "${DOMAINLIST[@]}"
do
echo "Creating account for $USER"
drush "@company-acsf."$SITE ucrt $USER --password="$PW" --mail="$USER"
while [ "x${USERLIST[count]}" != "x" ]
do
count=$(( $count + 1 ))
IFS=',' read -ra LINE <<< "${USERLIST[count]}"
USERNAME=${LINE[0]}
USERROLE=${LINE[1]}
if [[ -n "$USERNAME" && -n "$USERROLE" ]] ; then
echo "Updating account for $USERNAME with role \"$USERROLE\""
drush "@company-acsf."$SITE urol "${USERROLE}" $USERNAME
fi
done
done
exit 0
답변1
앞서 언급했듯이 이 count
변수는 for 루프 외부에서 초기화되지만 첫 번째 while 루프 이후에는 재설정되지 않습니다. 또 다른 문제는 count
변수를 너무 일찍 추가하고 문자를 page_creator
건너뛰는 것입니다. 비밀번호 PW
도 설정되어 있지 않은데 스크립트의 일부만 보여주신 것 같습니다.
while 루프를 다음과 같은 for 루프로 변경할 수 있습니다(몇 가지 사소한 개선 사항은 주석 참조).
#!/bin/bash
### ^^^^^^^ add shebang
#add the user
USERLIST=(
"$USER,page_creator"
#"$USER,layout_manager"
"$USER,page_reviewer"
"$USER,landing_page_creator"
"$USER,landing_page_reviewer"
"$USER,media_manager"
"$USER,block_creator"
#"$USER,site_builder"
"$USER,block_manager"
)
### remove
#count=0
DOMAINLIST=("lmn" "pdq" "xyz")
for SITE in "${DOMAINLIST[@]}"; do
### add SITE name to echo
echo "Creating account for $USER, site \"$SITE\""
drush "@company-acsf."$SITE ucrt $USER --password="$PW" --mail="$USER"
### change while-loop to for-loop
for ((count=0; count < ${#USERLIST[@]}; count++)); do
#while [ "x${USERLIST[count]}" != "x" ]
#do
### remove
#count=$(( $count + 1 ))
IFS=',' read -ra LINE <<< "${USERLIST[count]}"
USERNAME=${LINE[0]}
USERROLE=${LINE[1]}
if [[ -n "$USERNAME" && -n "$USERROLE" ]]; then
echo "Updating account for $USERNAME with role \"$USERROLE\""
drush "@company-acsf."$SITE urol "${USERROLE}" $USERNAME
fi
done
done
### probably not needed, exit status is the status of the last command
#exit 0
연습으로 남겨두세요:변수를 소문자로 변경모든 변수를 참조하십시오. 사용shellcheck.net쉘 스크립트에서 오류를 찾으십시오.