다음 스크립트가 있습니다.
while [ "$1" != "" ]
do
case "$1" in
-h) HOST="$2"; shift 2;;
esac
done
if test -z "$HOST"
then
[...]
else
TODAY=$(date +'%Y-%m-%d')
configs=("/etc/inittab" "/etc/default/cron" "/etc/default/login" "/etc/default/su" "/etc/group" "/etc/inet/inetd.conf" "/etc/mnttab" "/etc/netmasks" "/etc/nsswitch.conf" "/etc/protocols" "/etc/services" "/etc/syslog.conf" "/var/sadm/install/contents" "/etc/user_attr" "/etc/passwd")
ssh $HOST
for (i=0; i<${#configs[*]}; i++)
do
digest -v -a md5 ${configs[$i]} | awk '{print $2,$4}' | sed 's/) (/\n/;s/[()]//g';
done > /tmp/md5_config_$TODAY.txt
fi
호스트 이름(scriptname.sh -h 호스트 이름)을 사용하여 스크립트를 실행하면 오류가 발생합니다.
line 97: syntax error near unexpected token `('
line 97: `for (i=0;i<${#configs[*]};i++;); '
해결 방법이 있나요? "configs" 배열의 파일 이름을 사용하여 원격 호스트에서 "digest" 명령을 실행하고 싶습니다.
편집: 실제 상태
else
TODAY=$(date +'%Y-%m-%d')
configs=("/etc/inittab" "/etc/default/cron" "/etc/default/login" "/etc/default/su" "/etc/group" "/etc/inet/inetd.conf" "/etc/mnttab" "/etc/netmasks" "/etc/nsswitch.conf" "/etc/protocols" "/etc/services" "/etc/syslog.conf" "/var/sadm/install/contents" "/etc/user_attr" "/etc/passwd")
ssh $HOST
for ((i=0; i<${#configs[*]}; i++))
do
digest -v -a md5 ${configs[$i]} | awk '{print $2,$4}' | sed 's/) (/\n/;s/[()]//g';
done > /tmp/md5_config_$TODAY.txt
fi
답변1
내가 이런 글을 쓴다면
TODAY=`date --iso`
CONFIGS="/etc/inittab /etc/default/cron /etc/default/login ..."
ssh -q $HOST 'for cfg in '${CONFIGS}'; do digest -v -a md5 ${cfg}; done' |\
awk '{print $2,$4}' | sed 's/) (/\n/;s/[()]//g' >> /tmp/md5_config_$TODAY.txt
그러나 확인하고 싶을 수도 있습니다.인계철선그리고 이 목적을 위해 만들어진 다른 도구들.