自動コンフィグ投入シェル
自動的に投げるためのシェル。
#!/bin/bash pushd ~/test/ine.ccie.rsv5.workbook.initial.configs > /dev/null CONFIG_DIR="" CONFIG_DIR_PRE="" LIST=($(dir | egrep "^" | awk -F. '{print $1}' | sort | uniq)) GNS3HOST=127.0.0.1 BASEPORT=2100 # create menu PS3="complete=0 > " while : do clear echo ------------------------------------------------------------ echo SELECTED: [ $CONFIG_DIR ] echo ------------------------------------------------------------ if [ ${#LIST[*]} -eq 0 ]; then break fi select SEL in ${LIST[*]} do if [ ${REPLY} = "q" ]; then echo "Exit Menu." exit 0; else case "${REPLY}" in # Top "t" ) echo "Goto Top." CONFIG_DIR="" NUMBER_OF_FIELD=0 break ;; # Upper "u" ) # Not last 1 hop to top menu. if [ ${NUMBER_OF_FIELD} -gt 1 ]; then let NUMBER_OF_FIELD=${NUMBER_OF_FIELD}-1 CONFIG_DIR=${CONFIG_DIR_PRE} else NUMBER_OF_FIELD=0 CONFIG_DIR="" CONFIG_DIR_PRE="" fi break ;; "0" ) # complete menu check if [ -d $CONFIG_DIR ]; then break 2 fi echo "### Directory NOT Exist! ###" continue ;; * ) # Check mishit-key if [ -z $SEL ]; then # complete directory if [ ! -z $CONFIG_DIR ] && [ -d $CONFIG_DIR ]; then break 2 fi echo "### Directory NOT Exist! ###" continue 2 fi if [ -z $CONFIG_DIR ]; then NUMBER_OF_FIELD=1 CONFIG_DIR=${SEL} else CONFIG_DIR_PRE=${CONFIG_DIR} CONFIG_DIR=${CONFIG_DIR}.${SEL} NUMBER_OF_FIELD=`echo "$CONFIG_DIR" | awk -F. '{print NF}'` fi esac fi break done LIST=($(dir | egrep "^${CONFIG_DIR}" | awk -v NUMFIELD=$NUMBER_OF_FIELD -F. 'BEGIN{NUMFIELD = NUMFIELD + 1} {print $NUMFIELD}' | sort | uniq)) done # enter selected config directory pushd $CONFIG_DIR > /dev/null # do expect scripting for R1 to R20, SW1 to SW4. ROUTER_NUM=`expr $(ls -l R*.cfg | wc -l) + 1` expect -c " set timeout 1 log_user 0 log_file -noappend -a /tmp/sendconfig.log set i 1 while {\$i < $ROUTER_NUM} { puts \"------------------------------------------------------------\" puts [exec \"date\"] send_user \"Send config to R\$i...\" puts \"\r\n------------------------------------------------------------\" set PORT [expr $BASEPORT + \$i] spawn telnet $GNS3HOST \$PORT expect \"Connection refused\" { send_user \"\\033\\[1;31m\" send_user \"R\$i connect NG!\r\n\" send_user \"\\033\\[0;39m\" incr i 1 continue } send \"\r\n\r\n\" expect \"R\$i#\" set fp [open \"R\$i.cfg\"] while {! [eof \$fp]} { gets \$fp line send \"\$line\r\n\" expect \"R\$i\(\" } close \$fp expect \"R\$i#\" incr i 1 } if {[file exists \"SW1.cfg\"]} { set i 1 while {\$i < 5} { puts \"------------------------------------------------------------\" puts [exec \"date\"] send_user \"Send config to SW\$i...\" puts \"\r\n--------------------------------------------------------\" set PORT [expr $BASEPORT + 10 + \$i] spawn telnet $GNS3HOST \$PORT send \"\r\n\r\n\" expect \"SW\$i#\" set fp [open \"SW\$i.cfg\"] while {! [eof \$fp]} { gets \$fp line send \"\$line\r\n\" expect \"SW\$i\(\" } close \$fp expect \"SW\$i#\" incr i 1 } } send_user \"send Configuration done.\r\n\" exit " popd > /dev/null popd > /dev/null