bash script if and while conditions [duplicate] - bash

This question already has answers here:
Why should there be spaces around '[' and ']' in Bash?
(5 answers)
Closed 6 years ago.
I am having trouble with executing the following bash script:
#!/bin/bash
response=" "
while ["$response" != "q"]; do
echo -n "Please enter a response"; read response
done
ALSO
!/bin/bash
response="x"
if ["$response" = "x"]
then
echo "the value is x"
fi
What could the possible errors be?

Your while and if statements are spaced wrong.
while [ "$response" != "q" ]; do etc
You need a space between the bracket and the double quote.

Related

How to only accept input that is a valid index of an array in bash [duplicate]

This question already has answers here:
Why should there be spaces around '[' and ']' in Bash?
(5 answers)
Difference between single and double square brackets in Bash
(7 answers)
Why is "[[ 10 < 2 ]]" true when comparing numbers in bash? [duplicate]
(1 answer)
Closed 6 months ago.
I am trying some simple input validation in bash. Basically this part of my script outputs "press [index] to select [array element]." However I cannot seem to get it to stop and exit gracefully when an invalid input is entered. From my research so far this SHOULD work:
declare -a scenarios=()
scenarios+=("Scenario_123")
scenarios+=("Scenario_456")
scenarios+=("Scenario_789")
for i in ${!scenarios[#]}; do
echo -e "select $i for ${scenarios[$i]}"
done
read ScenInd
echo ${#scenarios[#]} #[${ScenInd}=~^[0-9]+$, =~ ^[[:digit:]]+
if ! [${ScenInd}=~ ^[[:digit:]]+$ ] || [${ScenInd} < 0] || [${ScenInd} >= ${#scenarios[#]}];
then
echo "INVALID SELECTION"
exit
fi
but when I run it and enter 8, I get '[8=~: command not found'
What have I done wrong and how do I fix this? I have tried this both with [${ScenInd}=~^[0-9]+$ and =~ ^[[:digit:]]+ yet the results are the same.
Thanks in advance

How to merge two if in shell script [duplicate]

This question already has answers here:
Compound 'if' statements with multiple expressions in Bash
(4 answers)
An if statement with AND operator [duplicate]
(2 answers)
Closed 2 years ago.
My shell script looks like below.
#!/bin/bash
STR1="STRING1"
STR2="STRING2"
if [[ "sample string contains some value" == *"contains"* ]]; then
if [ "$STR1" != "$STR2" ]; then
echo "do something"
fi
fi
How do I can merge two if line into single if?
My script searches for a substring in a string and compares the other two strings to do something.

what is wrong with my shell script for word guessing game? [duplicate]

This question already has answers here:
Command not found error in Bash variable assignment
(5 answers)
Closed 3 years ago.
I have written a script for word guessing in bash.
But is not working properly.
w = "###"
read -p "input word: " var
while [ "$w" != "$var" ]
do
echo "Wrong."
read -p "input word: " var
done
echo "Right answer"
You shouldn't have spaces when declaring varaible:
code="banana"

"[0: command not found" in Bash [duplicate]

This question already has answers here:
How to use double or single brackets, parentheses, curly braces
(9 answers)
Why should there be spaces around '[' and ']' in Bash?
(5 answers)
Command not found error in Bash variable assignment
(5 answers)
Closed 5 years ago.
I am trying to get the array in the while-loop and need to update the value in array too.
Below is my code what I have tried. I get this error [0: command not found
#!/bin/bash
i=0
while [$i -le "{#myarray[#]}" ]
do
echo "Welcome $i times"
i= $(($i+1)))
done
How do I fix this?
Need a space after [ and no space before or after = in the assignment. $(($i+1))) would try to execute the output of the ((...)) expression and I am sure that's not what you want. Also, you are missing a $ before the array name.
With these things corrected, your while loop would be:
#!/bin/bash
i=0
while [ "$i" -le "${#myarray[#]}" ]
do
echo "Welcome $i times"
i=$((i + 1))
done
i=$((i + 1)) can also be written as ((i++))
it is always better to enclose variables in double quotes inside [ ... ]
check your script through shellcheck - you can catch most basic issues there
See also:
Why should there be a space after '[' and before ']' in Bash?
How to use double or single brackets, parentheses, curly braces
Command not found error in Bash variable assignment
Using [ ] vs [[ ]] in a Bash if statement

How to write a multiline string to a file in Bash [duplicate]

This question already has answers here:
I just assigned a variable, but echo $variable shows something else
(7 answers)
Closed 6 years ago.
I want to rewrite a configuration file when asked from a bash script. Here is my code.
function quality {
echo $1 > ~/.livestreamerrc
echo ".livestreamer was modified!"
}
best="stream-types=hls
hls-segment-threads=4
default-stream=best
player=vlc --cache 5000"
read -p "Set quality: " INPUT
if [[ "$INPUT" == "!best" ]]; then
quality $best
fi
This code does the following to .livestreamer file though.
$cat ~/.livestreamerrc
stream-types=hls
Why?
Change it to
quality "$best" # double quotes to avoid word splitting
and then
echo "$1" > ~/.livestreamerrc
Note : Worth checking the [ shellcheck ] documentation.Also, fully uppercase variables like INPUT are reserved for the system.

Resources