I am comparing string in case statement as below : input variable can be D P KL ...
case $input in D|P|Q|L1|L2) val="Hello";; DD|DE|DF|CA) val="Hi" ;; MM|KL||TK|SZ) val="Bye" ;; echo $input
input variable not printing anything..
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.Sign up to join this community
There are two main issues in you script:
casestatement is not closed by
||which is a syntax error in most Bourne-like shells (use
""or an expansion that resolves to an empty value to match on the empty string portably)
It's unclear what your script is actually doing, so I'm speculating a bit and wrote this:
#!/bin/sh input="$1" case "$input" in D|P|Q|L1|L2) val='Hello' ;; DD|DE|DF|CA) val='Hi' ;; MM|KL|""|TK|SZ) val='Bye' ;; *) echo 'error' >&2 exit 1 esac printf 'input was "%s", val is "%s"\n' "$input" "$val"
$ ./script.sh D input was "D", val is "Hello" $ ./script.sh MM input was "MM", val is "Bye" $ ./script.sh BOO error