当我第二次运行bash脚本时,是否可以使用它来使bash脚本从特定行开始。
#!/bin/bash
#installed jq by using sudo apt-get install jq
# return indices and os,process
a=$(curl -XGET 'http://localhost:9200/_nodes/node01/stats/os,process?pretty=1')
#return just jvm
b=$(curl -XGET 'http://localhost:9200/_nodes/node01/stats/jvm?pretty=1')
c=$(curl -XGET 'http://localhost:9200/_nodes/node01/stats/indices?pretty=1')
d=$(curl -XGET 'http://localhost:9200/_nodes/node01/stats/thread_pool?pretty=1')
e=$(curl -XGET 'http://localhost:9200/_cluster/stats?pretty=1')
f=$(curl -XGET 'http://localhost:9200/_cat/nodes?v&h=uptime')
uptime=$(echo $f | cut -d' ' -f 2)
echo $uptime
echo $e >"parameters4.json"
echo $d > "parameters3.json"
echo $c > "parameters2.json"
echo $b
#uptime=$(cat servrtime.txt | grep uptime)
host=$(hostname -I)
echo $host
当我第二次运行它时必须从行 host = $(hostname -I)开始,有什么可以做的吗?
答案 0 :(得分:4)
个人而言,一次执行命令后,我不会太复杂,也不会触摸文件系统上某个位置的文件。
if [[ ! -f /some/file ]]; then
# your commands that should be executed only once
touch /some/file
fi
# the rest of the script
请确保您将文件触摸到不会意外删除的位置。
答案 1 :(得分:0)
另一种简单的方法是通过使用awk或sed从您想运行的命令中解析文件。
假设您要在此行echo $uptime
之后运行每个命令
awk方法:
awk '/\$uptime/{y=1;next}y' filename.sh | bash
sed方法:
sed '1,/\$uptime/d' filename.sh | bash
这些将在找到提到的字符串之后开始运行所有行。
注意:这将排除包含搜索字符串的行,因此,如果要从第n行开始运行所有行,则可以从n-1行传递搜索字符串。