2016-11-18 1 views
0

Mein Code sucht nur nach einem Benutzer in meiner passwd-Datei.So rufen Sie einen Code auf, der eine Codezeile von einem Benutzer benötigt

#!/bin/bash 

ret=false 
getent passwd "$1" >/dev/null 2>&1 && ret=true 

if $ret; then 
    echo "yes the user exists" 
else 
    echo "No, the user does not exist" 
fi 

Es funktioniert gut und Sie nennen es nur mit Namen:. problem2.bsh (Benutzername) und es prüft, ob der Benutzer in meiner Passwd-Datei ist. funktioniert gut. Aber ich möchte es zusammen mit 2 anderen Codes in eine Methode bringen, die mir die Möglichkeit gibt, es zu nennen. ex:

while [true] 
do 
    case $option in 
    a) . problem1.bsh 
    ;; 
    b) . problem2.bsh 
    ;; 
    c) . problem3.bsh 
    ;; 
    x) break 
    ;; 
    *) echo "invalid input" 
esac 
done 

Option a und c, arbeitet Aufruf Problem 1 und 3 in Ordnung, aber aus irgendeinem Grunde Problem 2 gibt nichts zurück. Gibt es sowieso problem2 um nach einem Benutzernamen zu fragen, um meine Passwd-Datei vorher einchecken und dann ausführen statt einsteigen zu müssen. problem2.bsh (Benutzername), um es zu überprüfen.

+0

Ich schlage vor, '[true]' 'durch true' zu ​​ersetzen. – Cyrus

Antwort

0

Gerade diese problem*.bsh Dateien in Funktionen machen und eine globale Variable verwenden wie:

problem1() { echo $user ... ; } 
problem2() { getent passwd "$user" ; } 
problem3() { echo ... "$user" ; } 
user=$1 
while true 
do printf 'option [abcx]? ' 
read -r 
case $REPLY in 
    a) problem1 ;; 
    b) problem2 ;; 
    c) problem3 ;; 
    x) break ;; 
    *) echo "invalid input" ;; 
esac 
done 
Verwandte Themen