Salut à tous,
je souhaite utiliser la fonction getopts pour parser les options.
J'ai dans mon script, une fonction et un programme principal, le programme principal utilise getopts pour effectuer le bon appel fonction (je suis dans un cas ou une option est utilisée à la fois).

Le problème semble se situer au niveau de la fonction avec getopts puisque aucune des options que j passe ne rentre dans le case et la commande que je construis est vide ...

le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/bin/bash -x
 
#make a pseudo top on pbs jobs.
top_pbs()
{
    optstring=u:i:
    while getopts $optstring opt
    do
        echo "!!! $opt !!!"
        case $opt in
            u) echo 'uuu'; cmd="qstat -u $OPTARG" ;;
            i) cmd="qstat $OPTARG" ;;
            *) cmd="qstat -a" ;;
        esac
    done
 
    while (true)
    do
        echo cmd : $cmd
        echo "---"
        eval "$cmd"
        sleep 2
        echo "***"
        clear
    done
}
 
 
 
#main
optstring=mu:i:
while getopts $optstring opt
do
    echo "process options"
   case $opt in
      u) echo "uuser" ; top_pbs -u $OPTARG ;; ## $OPTARG contains the argument to the option
      m) top_pbs -u $(whoami) ;;
      i) top_pbs -i $OPTARG ;;
      *) exit 1 ;;
   esac
done
résultat d'exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
./script.sh -u benoit+ optstring=mu:i:
+ getopts mu:i: opt
+ echo 'process options'
process options
+ case $opt in
+ echo uuser
uuser
+ top_pbs -u benoit+ optstring=u:i:
+ getopts u:i: opt
+ true
+ echo cmd :
cmd :
+ echo ---
---
+ eval ''
+ sleep 2
+ echo '***'
***
+ clear
+ true
+ echo cmd :
cmd :
+ echo ---
---
+ eval ''
+ sleep 2
merci d'avance,
ben