echo -e

echo -e

Ich möchte ein Passwort für die Einrichtung eines sambafreigegebenen Verzeichnisses mithilfe eines Shell-Skripts festlegen. Ich habe das folgende Skript geschrieben test.sh:

#!/bin/bash

pass=123456
(echo "$pass"; echo "$pass") | smbpasswd -s -a $(whoami)

Dies gibt Folgendes aus:

When run by root:
    smbpasswd [options] [username]
otherwise:
    smbpasswd [options]

options:
  -L                   local mode (must be first option)
  -h                   print this usage message
  -s                   use stdin for password prompt
  -c smb.conf file     Use the given path to the smb.conf file
  -D LEVEL             debug level
  -r MACHINE           remote machine
  -U USER              remote username
extra options when run by root or in local mode:
  -a                   add user
  -d                   disable user
  -e                   enable user
  -i                   interdomain trust account
  -m                   machine trust account
  -n                   set no password
  -W                   use stdin ldap admin password
  -w PASSWORD          ldap admin password
  -x                   delete user
  -R ORDER             name resolve order

Wie es zeigt, habe ich es nicht als Root ausgeführt. Wenn ich es als Root ausführe, also , sudo ./test.shläuft es einwandfrei. Aber der Haken ist, dass es rootanstelle von hinzufügt noobuser, was mein angemeldeter Benutzer ist.

Wie kann ich etwas hinzufügen, noobuserindem ich etwas Ähnliches mache (ich habe das Gefühl, dass ich hier etwas übersehe)?

Antwort1

test.sh:

#!/bin/bash

pass=123456

if [ -z "$SUDO_USER" ]; then
    echo "This script is only allowed to run from sudo";
    exit -1;
fi

(echo "$pass"; echo "$pass") | smbpasswd -s -a "$SUDO_USER"

Aufruf:

sudo ./test.sh

Antwort2

Dies ist ein Ausschnitt meiner Automatisierung smbpasswd -aper Bash-Skript, funktioniert wunderbar.

username="bob"

pass="secret"

echo -e "$pass\n$pass" | smbpasswd -a -s $username

Dieses ist erweitert und fügt den aktuellen Benutzernamen für Sie ein. (ohne awk ist es kürzer und übersichtlicher)

pass="secret"

echo -e "$pass\n$pass" | smbpasswd -a -s $(id -un)

.

Weitere Einzelheiten finden Sie unten:

.

echo -e

Mit der Option -e können Sie die Interpretation zusätzlicher Instanzen des Zeilenumbruchzeichens durch Echo sowie die Interpretation anderer Sonderzeichen aktivieren, beispielsweise eines horizontalen Tabulators, der durch \t dargestellt wird.

Pipe-Symbol „|“

In Unix-ähnlichen Computerbetriebssystemen ist eine Pipeline ein Mechanismus zur Interprozesskommunikation mittels Nachrichtenübermittlung.

https://en.wikipedia.org/wiki/Pipeline_(Unix)

https://superuser.com/questions/756158/was-macht-das-linux-pipe-symbol

Der Kredit geht an:LawrenceC, Wikipedia

smbpasswd -s

Die Option -s bewirkt, dass smbpasswd still ist (d. h. keine Eingabeaufforderungen ausgibt) und seine alten und neuen Passwörter von der Standardeingabe liest, anstatt von /dev/tty (wie das Programm passwd(1) tut). Diese Option soll Leuten helfen, die Skripte für smbpasswd schreiben.

Ich würde -u -n

idzeigt die Systemidentifikationen eines angegebenen Benutzers an.

Ausgänge:uid=0(root) gid=0(root) grupy=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

Einen Namen anstelle einer UID/GID anzeigen

Standardmäßig zeigt der Befehl id die Nummer für die Optionen -G, -g und -u an. Sie können den Befehl id zwingen, den Namen der UID oder GID anstelle der Nummer für die Optionen -G, -g und -u anzuzeigen, indem Sie die Option -n wie folgt übergeben:

id -ng {UserNameHere}
id -nu {UserNameHere}
id -nG {UserNameHere}
id -nG vivek

Lesen Sie mehr über id:https://www.cyberciti.biz/faq/unix-linux-id-command-examples-usage-syntax/

Der Kredit geht an:Brett(Lösung),Vivek-Ferienhaus(ausführliche Informationen)

ein kleiner Hinweis für den Fall von Problemen(Kredit an:Paul):https://superuser.com/a/343163/1169381

Antwort3

Wenn Sie dem Skript kein Argument übergeben möchten, können Sie Folgendes versuchen

#!/bin/bash

pass=123456
echo $pass
echo $pass | smbpasswd -s -a $(who am i | awk '{print $1}')

und rufen Sie dann das Skript auf.

Antwort4

Ich erstelle die Datei mit dem Namen smb.sh und dem Inhalt wie folgt

#!/bin/bash

mkdir /home/user_data/$1

#add owner
chown -R $1 /home/user_data/$1
#owner only 
chmod -R 700 /home/user_data/$1


user=$1
pass=$2

#sleep 3
smbpasswd -a $user<<EOF
$pass
$pass
EOF

und Sie können Parameter an smb.sh wie folgt senden

./smb.sh myusername  mypassword

wie einfach, Sie können die Datei smb.sh mit der PHP-Sprache verwenden, verwenden Sie die PHP-Exec-Funktion

verwandte Informationen