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..
There are two main issues in you script:
case statement is not closed by esac.|| which is a syntax error in most Bourne-like shells (use '' or "" 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" Testing it:
$ ./script.sh D input was "D", val is "Hello" $ ./script.sh MM input was "MM", val is "Bye" $ ./script.sh BOO error
$input? Also, thecasestatement is partial (not closed byesac), and you're not using$valanywhere.case "$input". It seems to me that the esac is missing. Or shall$inputbe printed only in the last case? And why$inputand not$val? Strange code...$inputin thecasestatement is good practice, but actually not necessary. unix.stackexchange.com/questions/68694/… (note, I always quote the expansion incasestatements)