Não sabe como usar meu script [duplicado]

1

para o meu primeiro ano CS Eu preciso saber Shell Scripting, mas eu sou realmente terrível nisso. Eu escrevi este script por exemplo

#!/bin/bash

[ $(whoami) != "root" ] && echo "Run as superuser" && exit 1

while getopts "ugb: " opt; do
case $opt in

u)
read -p "Wat is de naam van de user die je wilt toevoegen?: " username
[ $username == ""] && echo "Geen usename meegegeven!" && exit 1
read -p "Wat is de groepsnaam voor de gebruiker?: " group_name
[ "$(getent group $group_name)" == "" ] && echo "De groep bestaat niet, exiting" \ && exit 1
echo "adduser -m -g $group_name $username"
create_softlink $group_name $username

g)
read -p "Wat is de groepnaam voor de user?: " group_name
[ "$(getent group $group_name)" != "" ] && echo "De groep bestaat, exiting" \ && exit 1
addgroup "$groupname"
mk_shared_folder "$groupname"

b)
BACKUP_FOLDER="/var/backup"
[ ! -d "$BACKUP_FOLDER"] && mkdir -p "$BACKUP_FOLDER"
[ -d "$SHARED_FOLDER/"] && echo "Shared folder bestaat niet" && exit 1
zip "$SHARED_FOLDER/" "$BACKUP_FOLDER/-$(date +"%m-%d-%y")"

Agora quero executar este script. Por exemplo, fazendo um usuário. Em um script simples, você simplesmente faz ./scriptname.sh . Mas eu não sei qual é o comando.

Me desculpe se isso não faz sentido algum. Eu sou muito ruim nisso e quase não consigo entender nada disso.

EDIT: minha pergunta foi marcada como duplicata. No entanto, ./scriptname.sh NÃO executará o script.

    
por Maarten Wachters 05.12.2015 / 13:24

1 resposta

2

Para executar um script, você precisa seguir um destes procedimentos. Digamos que seu script esteja armazenado em /home/maarten/script.sh :

  1. Dê a bash como argumento:

    bash /home/maarten/script.sh
    
  2. Torne-o executável e execute-o escrevendo seu caminho na linha de comando:

    chmod +x /home/maarten/script.sh
    /home/maarten/script.sh
    
  3. Torne-o executável e mova-o para um diretório que esteja em seu $PATH :

    chmod +x /home/maarten/script.sh
    mkdir -p ~/bin && mv /home/maarten/script.sh ~/bin
    

    Se um diretório bin existir em seu diretório pessoal ( ~/bin significa $HOME/bin ), ele será automaticamente adicionado ao seu $PATH na próxima vez que você efetuar login. Para adicioná-lo manualmente para a sessão atual sem registro e depois de volta, você pode executar source ~/.profile ou PATH="$PATH:~/bin .

Agora, seu script também possui alguns erros de sintaxe. Você precisa de espaços após [ e antes de ] , while precisar ser finalizado com do , case deve ser finalizado com esac e cada instrução case com ;; e você deve sempre citar suas variáveis :

#!/bin/bash

[ $(whoami) != "root" ] && echo "Run as superuser" && exit 1

while getopts "ugb: " opt; do
 case $opt in

 u)
    read -p "Wat is de naam van de user die je wilt toevoegen?: " username
    [ "$username" == "" ] && echo "Geen usename meegegeven!" && exit 1
    read -p "Wat is de groepsnaam voor de gebruiker?: " group_name
    [ "$(getent group $group_name)" == "" ] && echo "De groep bestaat niet, exiting"  && exit 1
    ## I removed the echo since you probably want to run the command
    adduser -m -g "$group_name" "$username"
    ## I assume your real script has a function called 
    ## "create_softlink", right? This won't work otherwise
    create_softlink "$group_name" "$username"
 ;;
 g)
    read -p "Wat is de groepnaam voor de user?: " group_name
    [ "$(getent group $group_name)" != "" ] && echo "De groep bestaat, exiting" \ && exit 1
    addgroup "$groupname"
    ## Like "create_softlink" above, I am assuming you have a 
    ## function called "mk_shared_folder" somewhere. 
    mk_shared_folder "$groupname"
 ;;
 b)
    BACKUP_FOLDER="/var/backup"
    [ ! -d "$BACKUP_FOLDER" ] && mkdir -p "$BACKUP_FOLDER"
    ## Note that  is the 1st parameter passed to the script.
    ## However, since you're using getopts, and b expects an argument
    ## that argument is available as $OPTARG when the current $opt is b
    ## I have changed the script accordingly. 
    [ -d "$SHARED_FOLDER/" ] && echo "Shared folder bestaat niet" && exit 1
    zip "$SHARED_FOLDER/$OPTARG" "$BACKUP_FOLDER/$OPTARG-$(date +"%m-%d-%y")"
   ;;     
  esac
done
    
por terdon 05.12.2015 / 13:45