Home > Back-end >  how to pass defaults to flags
how to pass defaults to flags

Time:07-01

hi i need to pass defaults to the -c -t -u flags. in the -c i need that to be infinite in the -t i need that to be 1 sec and in the -u the defauls is ANY user

#!/bin/bash

set -u

print_usage(){
echo "usage: script[-c] [-t] [-u] exe-name"
}
if [[ $# -eq 0 ]]; then
print_usage
exit 1
fi

while getopts :c:t:u: flag; do
case $flag in
c) counts=$OPTARG;;
t) timeout=$OPTARG;;
u) user_name=$OPTARG;;
esac
done

if [ $counts==true ]
    then
top -n ${counts}
    fi
if [ $timeout==true ]
    then
top -d ${timeout}
    fi
if [ $user_name==true ]
    then
top -u ${user_name}
    fi

i try to put something like that in the biginning but it doesnt work counts= timeout=1 user_name=

thank you

CodePudding user response:

Assign default values to the variables before the while loop.

Use arrays for variables that can hold multiple arguments. See Setting an argument with bash for the reasons.

You can then execute a single top command that has all the arguments combined.

#!/bin/bash

set -u

print_usage(){
    echo "usage: script [-c repetitions] [-t timeout] [-u username] exe-name"
}
if [[ $# -eq 0 ]]; then
    print_usage
    exit 1
fi

counts=()
timeout=(-d 1)
user_name=()

while getopts :c:t:u: flag; do
    case $flag in
        c) counts=(-n "$OPTARG");;
        t) timeout=(-d "$OPTARG");;
        u) user_name=(-u "$OPTARG");;
    esac
done

top "${counts[@]}" "${timeout[@]}" "${user_name[@]}"
  • Related