por favor, perdón, ya estoy un UNIX principiante.

Voy a escribir un script de shell que se puede pedir de usuario escriba el nombre de archivo de salida y el número de líneas en el archivo, aquí está mi código:

echo "Pls enter your filename:"
read filename
result=wc -l $filename

echo "Your file has $result lines"

Sin embargo, yo no podía conseguir trabajo, ya que se queja de que el identificador «nombre de archivo». Podría ayuda de expertos?Gracias !!

InformationsquelleAutor Kevin | 2012-09-02

3 Comentarios

  1. 5

    Que funciona bien, al menos en bash. Así, el read funciona bien. Sin embargo, la asignación a result probablemente debería ser:

    result=$(wc -l $filename)

    pero, puesto que el comando de las salidas de línea recuento de y el nombre de archivo, es posible que desee cambiar un poco para que se acaba de obtener el número de línea, algo así como:

    result=$(cat $filename | wc -l)

    o:

    result=$(wc -l <$filename)

    El comando tiene:

    result=wc -l $filename

    se establece result el literal wc, a continuación, intente ejecutar el -l comando.

    Por ejemplo, la siguiente línea de cinco guión:

    #!/bin/bash
    echo "Pls enter your filename:"
    read filename
    result=$(cat $filename | wc -l)
    echo "Your file has $result lines"

    cuando se ejecute y se le dio su nombre como entrada, producirá los siguientes:

    Your file has 5 lines

    Si estás no utilizando bash, deberá especificar el shell que se utilice. Diferentes shells tienen diferentes maneras de hacer las cosas.

    • Para obtener wc para imprimir sólo el número, wc -l < $filename parece más elegante que cat
    • Usted no necesita la STDIN redirect — wc -l $filename hace el truco demasiado :).
    • el problema con el es la salida de wc -l infile es 12345 infile – que contiene el nombre del archivo de entrada así. Si sólo quieres el número de post-proceso que con algo como awk (otro proceso), o quitar el nombre de archivo mediante la entrada estándar (cat infile | wc ..., otro proceso, o < infile sin procesos adicionales).
    • Ah, gracias por la aclaración. Mental shell scripting…no es tan eficaz.
  2. 1

    Si quieres evaluar wc -l $filename , usted tiene t:

    result=$(wc -l $filename)

    De otra manera, con resultado=wc -l $filename, bash asignará wc resultado, y de interpretar la palabra siguiente(-l) como un comando a ejecutar.

  3. 1

    Aquí vamos :

    echo "Pls enter your filename:" 
    read filename 
    result=`wc -l $filename | tr -s " " | cut -f2 -d' '`
    
    echo "Your file has $result lines"

Dejar respuesta

Please enter your comment!
Please enter your name here