Dieses Bash-Skript schreiben, um Argumente anzunehmen?

2861
Urda

Wie würde ich dieses bash-Skript konvertieren:

mkdir /store/sftp/%USERNAME%  sudo useradd -d /incoming %USERNAME% sudo passwd %USERNAME% ## Password needs to be typed or passed in here sudo usermod -g sftp %USERNAME% sudo usermod -s /bin/false %USERNAME%  sudo chmod 755 /store/sftp/%USERNAME% sudo chown root:root /store/sftp/%USERNAME% sudo mkdir /store/sftp/%USERNAME%/incoming sudo chown %USERNAME%:sftp /store/sftp/%USERNAME%/incoming 

Um einen Benutzernamen und ein Passwort zu akzeptieren?

0
Beachten Sie, dass Befehlszeilenargumente normalerweise von anderen Benutzern des Systems angezeigt werden können. coneslayer vor 14 Jahren 1
Richtig, aber dies ist eine geschlossene Umgebung, in der nur ein Administrator reinkommen kann und alle anderen Benutzer für SFTP-Zwecke "eingesperrt" wurden. Urda vor 14 Jahren 0

1 Antwort auf die Frage

5
petersohn

First, you should avoid that lots of sudo calls. Instead, you should run the script with sudo. The final version would look like this:

#!/bin/bash # first check for root user if [ ! $UID -eq 0 ]; then echo "This script must be run as root." exit 1 fi # check if the user provided an argument if [ -z $1 ]; then echo "No username provided. Usage: $0 username" exit 2 fi username=$1 # set the first argument as the username mkdir "/store/sftp/$username" useradd -d /incoming "$username" passwd "$username" ## Password needs to be typed or passed in here usermod -g sftp "$username" usermod -s /bin/false "$username" chmod 755 "/store/sftp/$username" mkdir "/store/sftp/$username/incoming" chown "$username:sftp" "/store/sftp/$username/incoming" 

Quoting is necessary because the user name may contain spaces (but sure, it usually doesn't).

Edited to work.

Funktioniert super! Jedenfalls, um die Ausführung des Skripts zu stoppen, wenn kein Benutzer angegeben wird? Urda vor 14 Jahren 0
`wenn [-z $ 1]; dann echo "Kein Benutzername angegeben. Verwendung: $ 0 Benutzername"; Ausfahrt 2; fi` Dennis Williamson vor 14 Jahren 2
"echo" blah "> & 2", um zusätzliche Punkte für die korrekte Verwendung von "stderr" zu erhalten. grawity vor 14 Jahren 1