test_while.sh

本文介绍了一个简单的bash脚本,该脚本使用无限循环记录计数并将其写入日志文件。每隔三秒,计数器增加一次并在日志中更新。
 

#!/bin/bash

logfile=while.logs
numCount=0

echo "start" > ${logfile}

while true ;
do
  let "numCount += 1"
  echo " count[${numCount}] ... " >> ${logfile}
  sleep 3
done

echo "end!" >> ${logfile}

<think>我们按照用户需求整理命令顺序,注意用户需要执行一系列操作,包括添加临时IP、验证、SSH连接、执行多个脚本,并等待run_testOAM.sh执行结果为result0后再继续。 由于SSH连接后会在远程服务器上执行命令,因此我们需要将后续的命令都放在SSH连接后执行,或者使用SSH执行远程命令。 但是,用户要求等待run_testOAM.sh执行结果为result0,这可能需要循环检查,因此我们可能需要编写一个循环来检查结果。 然而,需要注意的是,SSH连接是交互式的,如果我们要自动化,可以考虑使用SSH执行远程命令,并将多个命令组合在一起。 由于用户的操作步骤较多,且需要等待某个结果,我们有两种方式: 1. 在本地使用SSH执行远程命令,并编写循环来检查结果(可能需要多次SSH连接)。 2. 在远程服务器上编写一个脚本,然后通过SSH执行该脚本,该脚本包含所有步骤。 但是,由于用户要求整理命令顺序,我们尽量在本地终端中通过多个命令完成。 步骤分解: 1. 添加临时IP 2. 验证IP添加 3. SSH连接到远程服务器,然后执行以下操作: a. 进入目录:cd /home/user/zl/1d3u_test/run_shell b. 运行start_gnb.sh(第一次) c. 运行run.sh(如果有的话,用户提到了run.sh) d. 运行run_testOAM.sh,并等待其输出结果出现"result0" e. 再次运行start_gnb.sh(第二次) 但是,用户没有明确提到run.sh,但提到了run_testOAM.sh和两次start_gnb.sh。根据用户描述,我们按照以下顺序执行脚本: - 第一次运行start_gnb.sh - 运行run_testOAM.sh,并等待其输出结果为"result0" - 第二次运行start_gnb.sh 注意:用户还提到了在SSH连接后执行了cd、ls等命令,但主要是为了进入目录并运行脚本。 由于在SSH连接中执行多个命令,我们可以使用分号或者&&连接命令,但是等待run_testOAM.sh输出特定结果需要循环,因此我们可以在远程服务器上使用一个循环。 但是,由于我们无法在单次SSH命令中直接进行交互式等待(除非使用更复杂的脚本),我们可以考虑在远程服务器上运行一个后台进程,然后轮询结果。 不过,为了简化,我们可以这样设计: 在SSH连接后,执行以下命令: cd /home/user/zl/1d3u_test/run_shell ./start_gnb.sh # 第一次运行 ./run_testOAM.sh > output.log & # 后台运行,并将输出重定向到文件,然后我们循环检查这个文件 # 然后循环检查output.log中是否出现"result0" while true; do if grep -q "result0" output.log; then break fi sleep 1 done ./start_gnb.sh # 第二次运行 但是,由于SSH连接会一直保持直到所有命令执行完毕,所以我们可以将上述命令写在一个脚本里,然后通过SSH执行。 然而,用户要求的是在终端中执行的命令顺序,我们可以将上述命令通过一个SSH连接执行,使用多行命令。 在本地终端中,我们可以这样写: 注意:由于SSH命令中执行循环,我们需要将循环等命令用单引号或双引号括起来,并且注意转义。 但是,为了可读性和可操作性,我们建议用户分步骤执行,或者编写一个本地脚本。 不过,按照用户要求整理命令顺序,我们将所有步骤写在一起,使用分号连接,循环部分使用while循环。 但是,由于在SSH中执行循环,我们需要将循环命令放在引号内,并且使用分号分隔命令。 具体步骤如下: 步骤1:添加临时IP 步骤2:验证IP添加 步骤3:使用SSH连接并执行命令(包括进入目录、启动脚本、等待结果、再次启动脚本) 由于等待结果需要时间,所以SSH连接会持续一段时间直到所有命令完成。 完整命令顺序如下: 1. 添加临时IP: sudo ifconfig en0 alias 172.10.16.179 netmask 255.255.255.0 2. 验证IP添加: ifconfig en0 | grep "inet " | grep 172.10.16.179 3. SSH连接并执行命令(注意:这里使用单引号将远程命令括起来,避免本地变量扩展): ssh root@172.10.16.179 ' cd /home/user/zl/1d3u_test/run_shell ./start_gnb.sh ./run_testOAM.sh > output.log & # 获取后台进程的PID pid=$! # 等待output.log中出现result0 while ! grep -q "result0" output.log; do sleep 1 done # 杀死run_testOAM.sh进程(如果需要的话,根据实际情况,可能已经结束) kill $pid 2>/dev/null # 再次运行start_gnb.sh ./start_gnb.sh ' 注意:上面的远程命令中,我们将run_testOAM.sh放在后台运行,并重定向输出到output.log,然后循环检查该文件直到出现"result0"。然后杀死该后台进程(如果它还在运行),最后再次运行start_gnb.sh。 但是,run_testOAM.sh可能运行一次就结束了,那么后台进程已经结束,我们就不需要杀死它。所以这一步可以省略。如果run_testOAM.sh是一个持续运行并输出日志的脚本,那么我们需要杀死它。 另一种做法是,run_testOAM.sh可能运行一次就退出,那么我们就不需要后台运行,而是直接运行,并检查其输出。但是用户要求等待输出结果为result0,所以我们需要查看输出。如果它运行一次就退出,我们可以直接运行并重定向到文件,然后检查文件。 修改为: ./run_testOAM.sh > output.log # 然后检查文件,因为已经运行结束,所以不需要后台和循环等待,只需检查一次 if grep -q "result0" output.log; then ./start_gnb.sh else echo "Error: result0 not found" exit 1 fi 但是用户没有说明run_testOAM.sh是立即退出还是持续运行。根据用户要求“等待run_testOAM.sh执行结果为result0”,我们假设它会在运行过程中输出,并且可能需要一段时间。因此,我们采用第一种后台运行并循环检查的方式。 4. 最后,删除临时IP(如果需要): sudo ifconfig en0 -alias 172.10.16.179 但是用户没有要求删除,但根据之前的操作,我们可以加上。 因此,完整的命令顺序如下: ```bash # 步骤1: 添加临时IP sudo ifconfig en0 alias 172.10.16.179 netmask 255.255.255.0 # 步骤2: 验证IP添加 ifconfig en0 | grep 'inet ' | grep 172.10.16.179 # 步骤3: SSH连接并执行远程命令 ssh root@172.10.16.179 << 'EOF' cd /home/user/zl/1d3u_test/run_shell ./start_gnb.sh ./run_testOAM.sh > output.log & pid=$! while ! grep -q "result0" output.log; do sleep 1 done # 如果进程还在,则杀死 kill $pid 2>/dev/null ./start_gnb.sh EOF # 步骤4: 删除临时IP(可选,根据需求) # sudo ifconfig en0 -alias 172.10.16.179 ``` 注意:这里使用了heredoc(<<'EOF')来传递多行命令,并且使用单引号防止本地变量扩展。这样可以在SSH连接中执行多行命令。 但是,由于在循环中不断检查,可能会占用远程服务器的资源,所以建议每次sleep时间可以适当增加(比如sleep 5)以减少检查频率。 另外,如果run_testOAM.sh运行时间很长,我们可能需要设置超时机制,避免无限循环。但用户没有提供超时要求,所以这里不添加。 最后,用户还提到了在连接后执行了cd ..和ls等命令,但根据需求,主要是为了进入目录并运行脚本,所以我们在脚本中直接进入指定目录。 如果用户需要查看目录内容,可以在脚本中添加ls命令。 因此,我们可以调整远程命令部分,添加一些查看目录的步骤: ```bash ssh root@172.10.16.179 << 'EOF' cd /home/user/zl/1d3u_test/run_shell ls -l # 查看目录内容 ./start_gnb.sh # ... 后续命令同上 EOF ``` 请用户根据实际情况调整。 注意:在运行前,请确保start_gnb.sh和run_testOAM.sh具有可执行权限(可以使用chmod +x)。 如果遇到权限问题,可以在远程命令中添加: chmod +x /home/user/zl/1d3u_test/run_shell/*.sh 另外,如果SSH连接需要密码,那么上述命令会提示输入密码。如果需要自动化,建议配置SSH免密登录。 最后,删除临时IP的命令被注释掉了,如果用户需要,可以取消注释。 总结完整命令顺序如下: 1. 添加临时IP 2. 验证IP添加 3. SSH连接并执行一系列命令(包括进入目录、列出文件、运行脚本、等待结果、再次运行脚本) 4. 删除临时IP(可选) 请根据实际需求调整。</think>### 完整命令操作流程(macOS终端) ```bash # 1. 添加临时IP地址 sudo ifconfig en0 alias 172.10.16.179 netmask 255.255.255.0 # 2. 验证IP添加结果 ifconfig en0 | grep 'inet ' | grep 172.10.16.179 # 3. SSH连接目标设备 ssh root@172.10.16.179 # --- 远程服务器操作开始 --- # 4. 进入目录并运行初始脚本 cd /home/user/zl/1d3u_test/run_shell ./start_gnb.sh # 第一次运行 # 5. 执行测试脚本并等待结果 ./run_testOAM.sh | tee output.log # 实时输出并保存日志 while ! grep -q "result0" output.log; do sleep 5; done # 每5秒检查一次结果 # 6. 最终运行主脚本 ./start_gnb.sh # 第二次运行 # --- 远程服务器操作结束 --- # 7. (可选)退出SSH后删除临时IP sudo ifconfig en0 -alias 172.10.16.179 ``` ### 关键步骤说明: 1. **IP添加与验证**: ```bash sudo ifconfig en0 alias 172.10.16.179 netmask 255.255.255.0 ifconfig en0 | grep 'inet ' | grep 172.10.16.179 # 应显示添加的IP ``` 2. **脚本执行流程**: - 首次运行 `start_gnb.sh` - 执行 `run_testOAM.sh` 并监控输出 - 检测到 "result0" 后再次运行 `start_gnb.sh` 3. **结果监控技巧**: ```bash ./run_testOAM.sh | tee output.log # 同时输出到屏幕和文件 while ! grep -q "result0" output.log; do echo "等待结果生成..."; sleep 5; done echo "检测到result0,继续执行" ``` 4. **目录操作补充**: ```bash cd /home/user/zl/1d3u_test/run_shell # 进入主目录 ls -l # 查看文件列表 cd .. # 返回上级 ls # 查看目录内容 cd run_shell # 重新进入 ``` ### 自动化脚本建议 创建本地脚本 `run_remote.sh`: ```bash #!/bin/bash sudo ifconfig en0 alias 172.10.16.179 netmask 255.255.255.0 ssh root@172.10.16.179 << 'EOF' cd /home/user/zl/1d3u_test/run_shell ./start_gnb.sh ./run_testOAM.sh > output.log & while ! grep -q "result0" output.log; do sleep 5; done ./start_gnb.sh EOF sudo ifconfig en0 -alias 172.10.16.179 ``` 运行权限:`chmod +x run_remote.sh` ### 注意事项 1. 首次运行需确保脚本有执行权限: ```bash ssh root@172.10.16.179 "chmod +x /home/user/zl/1d3u_test/run_shell/*.sh" ``` 2. 若SSH连接超时,添加配置项: ```bash ssh -o ServerAliveInterval=60 root@172.10.16.179 ``` 3. 推荐使用SSH密钥认证避免重复输入密码[^1] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值