Je suis nouveau avec Unix et j'écris un script Shell.
Lorsque je lance cette ligne sur la commande Invite, elle affiche le nombre total de processus correspondant à:
ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'
par exemple, la sortie de la ligne ci-dessus est 2 dans l'invite de commande.
Je veux écrire un script Shell dans lequel la sortie de la ligne ci-dessus (2) est affectée à une variable, qui sera utilisée ultérieurement pour la comparaison dans une instruction if.
Je cherche quelque chose comme
output= `ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'`
echo $output
Mais quand je le lance, il dit que la sortie n'a pas pu être trouvée alors que j'en attendais 2. Aidez-moi.
Vous pouvez utiliser un $
signe comme:
OUTPUT=$(expression)
Essayer:
output=$(ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'); echo $output
Envelopper votre commande dans $( )
demande au shell d’exécuter cette commande, au lieu de tenter de définir la commande elle-même sur la variable nommée "sortie". (Notez que vous pouvez également utiliser les backticks `command`.)
Je peux fortement recommander http://tldp.org/LDP/abs/html/commandsub.html pour en savoir plus sur le remplacement de commande.
De plus, comme le souligne correctement 1_CR dans un commentaire, l'espace supplémentaire entre le signe égal et l'affectation entraîne son échec. Voici un exemple simple sur ma machine du comportement que vous rencontrez:
jed@MBP:~$ foo=$(ps -ef |head -1);echo $foo
UID PID PPID C STIME TTY TIME CMD
jed@MBP:~$ foo= $(ps -ef |head -1);echo $foo
-bash: UID: command not found
UID PID PPID C STIME TTY TIME CMD
Si vous voulez le faire avec multiline/multiple command/s, vous pouvez le faire:
output=$( bash <<EOF
#multiline/multiple command/s
EOF
)
Ou:
output=$(
#multiline/multiple command/s
)
Exemple:
#!/bin/bash
output="$( bash <<EOF
echo first
echo second
echo third
EOF
)"
echo "$output"
Sortie:
first
second
third