Como verifico o número correto de argumentos (um argumento). Se alguém tentar invocar o script sem passar o número correto de argumentos e verificar se o argumento da linha de comando realmente existe e é um diretório.
Tradução: se o número de argumentos não for (numericamente) igual a 1 ou o primeiro argumento não for um diretório, use o stderr e saia com um código de status de falha.
Relatório de erros mais amigável:
#!/bin/shif["$#"-ne 1];then
echo "Usage: $0 DIRECTORY">&2
exit 1fiif![-e "$1"];then
echo "$1 not found">&2
exit 1fiif![-d "$1"];then
echo "$1 not a directory">&2
exit 1fi
@ Andrew K: em qual linha está relatando isso? Se for a linha "se", tente recortar uma das duas cláusulas que a compõem if [ "$#" -ne 1 ] ; thenou if ! [ -d "$1" ]; thenveja qual cláusula está causando o problema.
Laurence Gonsalves
Eu descobri obrigado. E se o nome do arquivo não existir?
Andrew K
Não existe == nenhum diretor no que diz -drespeito. Se você deseja adicionar uma verificação separada, pode usar -epara verificar a existência.
Laurence Gonsalves
se [-e "$ 1"], em seguida, ecoa "$ 1: nenhum diretório desse tipo" exit 1 fi
Andrew K
@ Andrew K: você deseja inverter a verificação. -eretorna true se o arquivo existir. Adicionei um relatório de erro mais amigável à resposta.
Laurence Gonsalves
22
cat script.sh
var1=$1
var2=$2
if["$#"-eq 2]thenif[-d $var1 ]then
echo directory ${var1} exist
else
echo Directory ${var1}Does not exists
fiif[-d $var2 ]then
echo directory ${var2} exist
else
echo Directory ${var2}Does not exists
fielse
echo "Arguments are not equals to 2"
exit 1fi
Você pode verificar o número total de argumentos que são passados na linha de comando com " $#"
Diga, por exemplo, meu nome de script de shell éhello.sh
sh hello.sh hello-world
# I am passing hello-world as argument in command line which will b considered as 1 argument if[ $# -eq 1 ] then
echo $1
else
echo "invalid argument please pass only one argument "fi
shell
isso significa/bin/sh
Respostas:
Tradução: se o número de argumentos não for (numericamente) igual a 1 ou o primeiro argumento não for um diretório, use o stderr e saia com um código de status de falha.
Relatório de erros mais amigável:
fonte
if [ "$#" -ne 1 ] ; then
ouif ! [ -d "$1" ]; then
veja qual cláusula está causando o problema.-d
respeito. Se você deseja adicionar uma verificação separada, pode usar-e
para verificar a existência.-e
retorna true se o arquivo existir. Adicionei um relatório de erro mais amigável à resposta.cat script.sh
execute como abaixo -
A saída será como -
fonte
Você pode verificar o número total de argumentos que são passados na linha de comando com "
$#
" Diga, por exemplo, meu nome de script de shell éhello.sh
A saída será
hello-world
fonte