我是新手,所以请任何人都可以帮助我解决这个问题,我已经编写了所有代码,但是当我使用./work.sh host.txt
此处在 shell 中运行此命令时,主机是一个文本文件,我们将从其中读取两个值,其中一个是一个本地主机,另一个主机br414b-01.csc.tntech.edu
在输出中,应该显示文本文件行,但显示
cat: localhost: No such file or directory
cat: br414b-01.csc.tntech.edu: no such file or directory.
我只想在下一行中显示本地主机br414b-01.csc.tntech.edu
。我已经添加了所有代码,还有一件事请告诉我这一行的含义,我应该如何在调用函数中传递数组的全局变量
要调用该函数,您的脚本只需执行以下代码:
read_hosts $@
$@ 将脚本参数(包含主机的文件的名称)传递给函数。在上面的算法中,hosts_array 是一个全局变量,因此函数的调用者将能够使用全局变量来访问主机名。
#!/bin/bash
#function name
read_hosts(){
#function body
hosts=$(cat $1)
count=1
for host in $hosts; do
#make an array equal to the hosts.txt file data.
hosts_array[$count]=$host
count=`expr $count + 1`
done
done=0
while [ $done == 0 ]; do
echo "(P)ing a host"
echo "(S)sh to host"
echo "(T)race toute to host"
echo "(N)slookup host"
echo "(Q)uit"
read -p "Please enter a command: " cmd
case $cmd in
P|p)
pick_host "$hosts"
echo "ping -c 1 ${hosts_array[$which_host]}"
ping -c 1 ${hosts_array[$which_host]}
;;
S|s)
pick_host "$hosts"
read -p "Username: " user
echo "ssh $user@${hosts_array[$which_host]}"
ssh $user@${hosts_array[$which_host]}
;;
T|t)
pick_host "$hosts"
echo "traceroute ${hosts_array[$which_host]}"
traceroute ${hosts_array[$which_host]}
;;
N|n)
pick_host "$hosts"
echo "nslookup ${hosts_array[$which_host]}"
nslookup ${hosts_array[$which_host]}
;;
Q|q)
done=1;
exit
;;
*)
echo "Bad choice";
;;
esac
done
}
pick_host(){
count=1
for host in `cat $1`;
do echo "$count)$host"
count=`expr $count + 1`
done
read -p "Which host " which_host
while [ $which_host -ge 1 -a $which_host -lt $count ]; do
echo "valid"
done
}
read_hosts $@
答案1
pick_host
被调用"$hosts"
,即文件的内容host.txt
。不过,在函数中,你说
for host in `cat $1`
But$1
是第一个参数pick_host
,即“$hosts”。您正在尝试使用cat
主机名,而不是文件名。