
He escrito un script de shell que muestra el nombre de usuario, el nombre del terminal, la hora de inicio de sesión, etc., usando case
. El código es:
echo "Press 1 for user name, 2 for terminal name, 3 for login date and 4 for time"
read ch
case $ch in
1)
echo `who | cut -c1-8 | cut -d" " -f1`
;;
2)
echo `who | cut -c9-16 | column`
;;
3)
echo `who | cut -c22-32 | sort`
;;
4)
echo `who | cut -c34-39`
;;
esac
Cuando ejecuto este script, el resultado aparece en una sola línea y quiero que se muestre en formato de columnas (es decir, en varias líneas en una sola columna). Probé los cut
comandos column
y sort
, pero no tuve respiro. La salida es:
Press 1 for user name, 2 for terminal name, 3 for login date and 4 for time
1
bioinfo class class class class class class class class class class
[class@bio ~]$
Respuesta1
Yo usaría awk
en lugar de cut
para esto, por ejemplo:
#!/bin/bash
echo "Press 1 for user name, 2 for terminal name, 3 for login date and 4 for time"
read ch
case $ch in
1)
who | awk '{ print $1 }'
;;
2)
who | awk '{ print $2 }'
;;
3)
who | awk '{ print $3 " " $4 }'
;;
4)
who | awk '{ print $5 }'
;;
*)
echo "Wrong input"
esac
Ejemplos de ejecución:
./whoList.sh
Press 1 for user name, 2 for terminal name, 3 for login date and 4 for time
2
console
ttys000
ttys001
./whoList.sh
Press 1 for user name, 2 for terminal name, 3 for login date and 4 for time
3
Oct 3
Oct 3
Oct 3
./whoList.sh
Press 1 for user name, 2 for terminal name, 3 for login date and 4 for time
1
maulinglawns
maulinglawns
maulinglawns
./whoList.sh
Press 1 for user name, 2 for terminal name, 3 for login date and 4 for time
4
09:01
09:44
11:01
./whoList.sh
Press 1 for user name, 2 for terminal name, 3 for login date and 4 for time
7
Wrong input
La salida, como puedes ver, es todo en uno.columna, no en una sola línea.
Editar: Probado en OS X 10.11.6
bash --version GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)