这是我想要更改第二个输出的脚本:
#!/bin/bash
declare -a arr=("8.8.8.8" "8.8.4.4" "192.168.1.28")
x=0
DATE=`date +%Y-%m-%d:%H:%M:%S`
echo $DATE > denemesh.txt
while [ $x -le 2 ]
do
echo " ${arr[x]}" >> denemesh.txt
ping -c 4 ${arr[x]} | tail -1| awk ' {print $4 }' | cut -d '/' -f 2 >> denemesh.txt
x=$(( $x + 1 ))
done
目前,输出如下:
2014-12-22:20:22:37
8.8.8.8
18.431
8.8.4.4
17.758
192.168.1.28
0.058
是否可以改为输出而不是这样?
2014-12-22:20:22:37
8.8.8.8 18.431
8.8.4.4 17.758
192.168.1.28 0.058
答案 0 :(得分:1)
你真的需要修改一行:
echo -n " ${arr[x]}" >> denemesh.txt
使用-n
标志会抑制尾随换行符,因此您的下一个语句应附加到当前行。然后,您可以根据需要调整格式。
答案 1 :(得分:1)
当然可以。尝试这样的事情:
declare -a arr=("8.8.8.8" "8.8.4.4" "192.168.1.28")
d=$(date +%Y-%m-%d:%H:%M:%S)
echo "$d" > denemesh.txt
for ip in "${arr[@]}"
do
printf ' %-12s' "$ip"
ping -c 4 "$ip" | awk 'END{split($4,a,"/"); printf "%12s\n", a[2]}'
done >> denemesh.txt
我使用printf
格式说明符来对齐输出。 %-12s
左对齐第一列,固定宽度为12个字符,awk中的%12s
右对齐第二列。我没有使用while
循环,而是删除了变量x
并直接循环遍历数组中的值。我还在脚本中更改了旧式的反引号语法,而不是使用$( )
。 awk能够直接获取输出,所以我删除了你的尾巴和切割的使用。最后,您可以简单地重定向循环的输出,而不是将>>
放在每一行的末尾。