简体   繁体   中英

bash: convert string to int & if int > #

I would like to have a bash script that checks if a file has more than # amount of lines but i have not yet got it working right and I'm not so sure on how to do it. I've never used bash before.

right now i use: linesStr=$(cat log | wc -l) to get the amount of lines in the file (expect it to be a string). when echo'ing it gives me the number 30 which is correct.

but since its most likely a string it doesnt do the if-statement, so i need to have linesStr converted into a int called linesInt.

I also have the feeling the if-statement itself is not done correctly either.

#!/bin/bash

linesStr=$(cat log | wc -l)
echo $linesStr

if [$linesStr > 29]
    then echo "log file is bigger than 29 lines"
    #sed -i 1d log
fi

I would appreciate if anyone can give me a simple beginners solution.

  1. No need for cat .
  2. Lack of spaces around [ and ] .
  3. Use a numeric comparison operator instead of the redirect operator.

Here is a working script.

#!/bin/bash

linesStr=$( wc -l < log )

if [[ "$linesStr" -gt "29" ]]; then
    echo Foo
fi

your if block of code is wrong if [$linesStr > 29] there should be a space after [ and before ]

#!/bin/bash

linesStr=$(wc -l < log )
echo $linesStr

if [[ $lineStr -gt 29 ]];then 
    echo "log file is bigger than 29 lines"
fi

it is advisable that you always use [[ ]] with an if statement rather than using [ ] . Whenever you want to compare integers dont use > or < , use -gt -ge -lt -le . And if you want to do any form of mathematical comparison it is advisable that you use (( )) .

(( lineStr > 29 )) && {
    # do stuff
}

you should also note that you don't need the bash comparison operators or getting the value of a variable with $ when using (( ))

There are no string or integer types to convert. The problem is that you're using the wrong comparison operator. For numeric comparison use if [ $linesStr -gt 29 ] . Read man bash section CONDITIONAL EXPRESSIONS for available operators.

(( $(wc -l < log) > 29 )) && echo too long

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM