Como passar a variável array para funcionar e resolver o erro no found found

1

Eu sou novo nisso, então, por favor, qualquer um pode me ajudar a descobrir esse problema, eu escrevi todo o código, mas quando eu executo este comando no shell usando ./work.sh host.txt aqui o host é um arquivo de texto de onde nós ll ler dois valores um é um host local e o outro é br414b-01.csc.tntech.edu então na saída as linhas do arquivo de texto devem ser exibidas mas lá exibe

cat: localhost: No such file or directory
cat: br414b-01.csc.tntech.edu: no such file or directory.

Eu só quero mostrar o host local e na próxima linha br414b-01.csc.tntech.edu . Eu adicionei meu código todo e uma coisa por favor, diga-me o significado desta linha como devo passar a variável global de matriz na função chamada

To call the function, your script will simply execute the following code:

read_hosts $@ 

The $@ passes the script parameter (the name of the file containing the hosts) to the function. In the above algorithm, hosts_array is a global variable, so the function's caller will be able to use the global variable to access the host names.

#!/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 $@
    
por Error3735 23.11.2015 / 00:01

1 resposta

1

pick_host é chamado com "$hosts" , ou seja, o conteúdo do arquivo host.txt . Na função, porém, você diz

for host in 'cat $1'

Mas $1 é o primeiro argumento para pick_host , ou seja, "$ hosts". Você está tentando cat nomes de host, não nomes de arquivos.

    
por 23.11.2015 / 00:23

Tags