bash 下 hash array的支持

本文展示了一个使用Bash脚本语言定义和遍历关联数组的例子。通过声明一个包含不同地区URL的关联数组,该脚本能够有效地遍历并打印出每个地区的名称及其对应的URL。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

declare -A region_URLs
region_URLs[beijing]="https://1.com"
region_URLs[shanghai]="https://2.com"
region_URLs[Sydney]="https://3.com"


for site in "${!region_URLs[@]}"; do
        echo $site -- ${region_URLs[$site]}
done


root@219:~# bash test.sh
shanghai -- https://2.com
Sydney -- https://3.com
beijing -- https://1.com



References: http://www.artificialworlds.net/blog/2012/10/17/bash-associative-array-examples/

set -x read -p "输入3个ip:" IPS tar xf gpmall-cluster.tar.gz mv /etc/yum.repos.d/* /tmp cat << EOF > /etc/yum.repos.d/local.repo [a] baseurl=file:///root/gpmall-cluster/gpmall-repo gpgcheck=0 EOF # 写入hosts文件 IFS=' ' read -ra IP_ARRAY <<< "$IPS" cat << EOF > /etc/hosts ${IP_ARRAY[0]} mycat ${IP_ARRAY[1]} db1 ${IP_ARRAY[2]} db2 EOF # 判断命令是否存在 if ! command -v expect &> /dev/null; then yum install -y expect fi filepath=~/.ssh/id_rsa.pub user=root password=000000 auto_ssh_copy_id() { expect -c "set timeout -1; spawn ssh-copy-id -i $4 $2@$1; expect { *(yes/no)* {send -- yes\r;exp_continue;} *password:* {send -- $3\r;exp_continue;} eof { exit 0;} }"; } # 判断本地的公钥是否存在,如果不存在则需要生成公钥 [ ! -f $filepath ] && { ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa } hosts=`cat /etc/hosts | grep -v "^#"` # 对配置文件中的每一台主机进行免密登录操作 for serverIp in $hosts do # echo $serverIp--$user--$password # 将公钥发送给需要免密登录的主机 auto_ssh_copy_id $serverIp $user $password $filepath done #复制yum文件hosts文件 ssh db1 "mv /etc/yum.repos.d/* /tmp" ssh db2 "mv /etc/yum.repos.d/* /tmp" scp /etc/yum.repos.d/local.repo db1:/etc/yum.repos.d/ scp /etc/yum.repos.d/local.repo db2:/etc/yum.repos.d/ scp /etc/hosts db1:/etc/hosts scp /etc/hosts db2:/etc/hosts setenforce 0 ssh db1 "setenforce 0" ssh db2 "setenforce 0" scp -r /root/gpmall-cluster db1:/root scp -r /root/gpmall-cluster db2:/root #完成数据库安装 ssh db1 "yum install -y mariadb mariadb-server && systemctl start mariadb && systemctl enable mariadb && mysqladmin password 123456 " ssh db2 "yum install -y mariadb mariadb-server && systemctl start mariadb && systemctl enable mariadb && mysqladmin password 123456 " #更改数据库配置 ssh db1 'echo -e "[mysqld]\nlog_bin=mysql-bin\nserver_id=1" >> /etc/my.cnf && systemctl restart mariadb' ssh db2 'echo -e "[mysqld]\nlog_bin=mysql-bin\nserver_id=2" >> /etc/my.cnf && systemctl restart mariadb' #完成主从数据库 ssh db1 'mysql -uroot -p123456 -e "grant all privileges on *.* to root@'\''%'\'' identified by '\''123456'\''; grant replication slave on *.* to '\''user'\''@'\''db2'\'' identified by '\''123456'\'';"' ssh db2 'mysql -uroot -p123456 -e "grant all privileges on *.* to root@'\''%'\'' identified by '\''123456'\'';change master to master_host='\''db1'\'',master_user='\''user'\'',master_password='\''123456'\'',master_log_file='\''mysql-bin.000001'\'';start slave;"' #mycat 部署 yum install -y java java-devel tar -zxvf /root/gpmall-cluster/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/ chmod -R 777 /usr/local/mycat/ echo export MYCAT_HOME=/usr/local/mycat/ >> /etc/profile source /etc/profile cat > /usr/local/mycat/conf/schema.xml << EOF <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="gpmall" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"></schema> <dataNode name="dn1" dataHost="localhost1" database="gpmall" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" dbType="mysql" dbDriver="native" writeType="0" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="${IP_ARRAY[1]}:3306" user="root" password="123456"> <readHost host="hostS1" url="${IP_ARRAY[2]}:3306" user="root" password="123456" /> </writeHost> </dataHost> </mycat:schema> EOF sed -i '82s/TESTDB/gpmall/' /usr/local/mycat/conf/server.xml sed -i '95,99d' /usr/local/mycat/conf/server.xml #导入数据库文件mysql scp /root/gpmall-cluster/gpmall.sql db1:/root ssh db1 'mysql -uroot -p123456 -e "create database gpmall; use gpmall ;source /root/gpmall.sql;"' /bin/bash /usr/local/mycat/bin/mycat start #Zookeeper集群部署 yum install -y java java-devel ssh db1 "yum install -y java java-devel" ssh db2 "yum install -y java java-devel" tar -zxvf /root/gpmall-cluster/zookeeper-3.4.14.tar.gz \cp -f /root/zookeeper-3.4.14/conf/zoo_sample.cfg /root/zookeeper-3.4.14/conf/zoo.cfg cat << EOF >> /root/zookeeper-3.4.14/conf/zoo.cfg server.1=${IP_ARRAY[0]}:2888:3888 server.2=${IP_ARRAY[1]}:2888:3888 server.3=${IP_ARRAY[2]}:2888:3888 EOF scp -r /root/zookeeper-3.4.14 db1:/root/ scp -r /root/zookeeper-3.4.14 db2:/root/ mkdir -p /tmp/zookeeper && echo "1" > /tmp/zookeeper/myid ssh db1 'mkdir -p /tmp/zookeeper > /dev/null && echo "2" > /tmp/zookeeper/myid' ssh db2 'mkdir -p /tmp/zookeeper > /dev/null && echo "3" > /tmp/zookeeper/myid' /root/zookeeper-3.4.14/bin/zkServer.sh start ssh db1 '/root/zookeeper-3.4.14/bin/zkServer.sh start ' ssh db2 '/root/zookeeper-3.4.14/bin/zkServer.sh start ' #Kafka集群部署 tar -zxvf /root/gpmall-cluster/kafka_2.11-1.1.1.tgz sed -i "s/broker.id=0/broker.id=1/g" /root/kafka_2.11-1.1.1/config/server.properties sed -i "s/#listeners=PLAINTEXT:\/\/:9092/listeners=PLAINTEXT:\/\/${IP_ARRAY[0]}:9092/g" /root/kafka_2.11-1.1.1/config/server.properties sed -i "s/zookeeper.connect=localhost:2181/zookeeper.connect=${IP_ARRAY[0]}:2181,${IP_ARRAY[1]}:2181,${IP_ARRAY[2]}:2181/g" /root/kafka_2.11-1.1.1/config/server.properties scp -r /root/kafka_2.11-1.1.1 db1:/root/ scp -r /root/kafka_2.11-1.1.1 db2:/root/ ssh db1 'sed -i "s/broker.id=0/broker.id=2/g;31d" /root/kafka_2.11-1.1.1/config/server.properties' ssh db1 "sed -i \"31i listeners=PLAINTEXT:\/\/${IP_ARRAY[1]}:9092\" /root/kafka_2.11-1.1.1/config/server.properties" ssh db2 'sed -i "s/broker.id=0/broker.id=3/g;31d" /root/kafka_2.11-1.1.1/config/server.properties' ssh db2 "sed -i \"31i listeners=PLAINTEXT:\/\/${IP_ARRAY[2]}:9092\" /root/kafka_2.11-1.1.1/config/server.properties" /root/kafka_2.11-1.1.1/bin/kafka-server-start.sh -daemon /root/kafka_2.11-1.1.1/config/server.properties ssh db1 "/root/kafka_2.11-1.1.1/bin/kafka-server-start.sh -daemon /root/kafka_2.11-1.1.1/config/server.properties" ssh db2 "/root/kafka_2.11-1.1.1/bin/kafka-server-start.sh -daemon /root/kafka_2.11-1.1.1/config/server.properties" #安装启动redis yum install redis -y sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g;s/protected-mode yes/protected-mode no/g" /etc/redis.conf systemctl start redis #部署集群应用系统 cat << EOF >> /etc/hosts ${IP_ARRAY[0]} zookeeper1 ${IP_ARRAY[1]} zookeeper2 ${IP_ARRAY[2]} zookeeper3 ${IP_ARRAY[0]} mysql.mall ${IP_ARRAY[0]} redis.mall ${IP_ARRAY[0]} kafka1.mall ${IP_ARRAY[1]} kafka2.mall ${IP_ARRAY[2]} kafka3.mall ${IP_ARRAY[0]} zk1.mall ${IP_ARRAY[1]} zk2.mall ${IP_ARRAY[2]} zk3.mall EOF scp /etc/hosts db1:/etc/hosts scp /etc/hosts db2:/etc/hosts #启动java包 cat << EOF >> /root/start.sh nohup java -jar /root/gpmall-cluster/shopping-provider-0.0.1-SNAPSHOT.jar >> /root/shopping-provider.log 2>&1 & sleep 5 nohup java -jar /root/gpmall-cluster/user-provider-0.0.1-SNAPSHOT.jar >> /root/user-provider.log 2>&1 & sleep 5 nohup java -jar /root/gpmall-cluster/gpmall-shopping-0.0.1-SNAPSHOT.jar >> /root/gpmall-shopping.log 2>&1 & sleep 5 nohup java -jar /root/gpmall-cluster/gpmall-user-0.0.1-SNAPSHOT.jar >> /root/gpmall-user.log 2>&1 & sleep 5 EOF scp start.sh db1:/root scp start.sh db2:/root ssh db1 "bash start.sh" ssh db2 "bash start.sh" #部署nginx yum install nginx -y rm -rf /usr/share/nginx/html/* cp -rvf /root/gpmall-cluster/dist/* /usr/share/nginx/html/ sed -i "1i upstream myuser { \n server ${IP_ARRAY[1]}:8082; \n server ${IP_ARRAY[2]}:8082; \n ip_hash; \n} \n upstream myshopping { \n server ${IP_ARRAY[1]}:8081; \n server ${IP_ARRAY[2]}:8081; \n ip_hash; \n} \n upstream mycashier { \n server ${IP_ARRAY[1]}:8083; \n server ${IP_ARRAY[2]}:8083; \n ip_hash; \n}" /etc/nginx/conf.d/default.conf sed -i "36i location /user { \n proxy_pass http://myuser; \n} \n location /shopping { \n proxy_pass http://myshopping; \n} \n location /cashier { \n proxy_pass http://mycashier; \n}" /etc/nginx/conf.d/default.conf systemctl start nginx
最新发布
06-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值