如何将数组变量传递给函数并解决“找不到命令”错误

如何将数组变量传递给函数并解决“找不到命令”错误

我是新手,所以请任何人都可以帮助我解决这个问题,我已经编写了所有代码,但是当我使用./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主机名,而不是文件名。

相关内容