The definition for the syntax check is:
Here is how I see this.
If no code is executed, then variables are not defined. If there is no execution, then commands like [ are not executed, and there can be no check for the internal syntax of expressions after [ -- which is the same as command test.
I think the syntax check of the -n option can only check structural syntax. Below are some examples that I thought of, and there are probably more.
So to debug a code, I think a preliminary run with bash -n can be used to help eliminate gross errors in structure, missing elements like then or do, unmatched parens and quotes, etc. Then the script can be run to get rid of the internal syntax errors, like those mentioned above with test and friends, and finally shellcheck to look at other items.
So check, run, check would be how I would approach this if I were to write long sections of code (my longest shell script is just under 800 lines, but most are far smaller). There might be instances where check, check, run might be more useful. It depends on the code and coder.
Best wishes ... cheers, drl
Here are some samples that bash -n can catch as noted by script run-all:
producing:
Is it possible to combine a regular expression with a aritmetical expression? For example, taking a 8-numbers caracter sequece and casting each output of a grep, comparing to a constant.
THX! (2 Replies)
#!/bin/bash
if then
#echo "infinite loop"
exit 0
fi
when I run this file I get the following error:
./test_infinite_loop: line 5: syntax error near unexpected token `fi'
./test_infinite_loop: line 5: `fi'
:confused: (4 Replies)
CA_RELEASE has a value of 6. I need to check if that this is a numeric value. if not error.
source $CA_VERSION_DATA
if * ]
then
echo "CA_RELESE $CA_RELEASE is invalid"
exit -1
fi
+ source /etc/ncgl/ca_version_data
++ CA_PRODUCT_ID=samxts
++ CA_RELEASE=6
++ CA_WEEK_NO=7
++... (3 Replies)
Hi all,
How am I read a file, find the match regular expression and overwrite to the same files.
open DESTINATION_FILE, "<tmptravl.dat" or die "tmptravl.dat";
open NEW_DESTINATION_FILE, ">new_tmptravl.dat" or die "new_tmptravl.dat";
while (<DESTINATION_FILE>)
{
# print... (1 Reply)
Hello All,
I'm trying to extract the lines between two consecutive elements of an array from a file.
My array looks like:
problem_arr=(PRS111 PRS213 PRS234)
j=0
while } ]
do
k=`expr $j + 1`
sed -n "/${problem_arr}/,/${problem_arr}/p" problemid.txt
---some operation goes... (11 Replies)
Hello All,
Not sure why this is happening...
When the following If Statement is evaluated for some reason it is creating a file in the CWD called '0'. I've seen this happen
before, just not in an If Statement...
CODE:
if
then
DIR_NAME="$1"
DIR_SIZE=0
STATUS=""
else... (3 Replies)