简体   繁体   中英

Arithmetic in shell script (arithmetic in string)

I'm trying to write a simple script that creates five textfiles enumerated by a variable in a loop. Can anybody tell my how to make the arithmetic expression be evaluated. This doesn't seem to work:

touch ~/test$(($i+1)).txt

(I am aware that I could evaluate the expression in a separate statement or change of the loop...)

Thanks in advance!

The correct answer would depend on the shell you're using. It looks a little like bash, but I don't want to make too many assumptions.

The command you list touch ~/test$(($i+1)).txt will correctly touch the file with whatever $i+1 is, but what it's not doing, is changing the value of $i .

What it seems to me like you want to do is:

  • Find the largest value of n amongst the files named testn.txt where n is a number larger than 0
  • Increment the number as m.
  • touch (or otherwise output) to a new file named testm.txt where m is the incremented number.

Using techniques listed here you could strip the parts of the filename to build the value you wanted.

Assume the following was in a file named "touchup.sh":

#!/bin/bash
# first param is the basename of the file (e.g. "~/test")
# second param is the extension of the file (e.g. ".txt")
# assume the files are named so that we can locate via $1*$2 (test*.txt)

largest=0
for candidate in (ls $1*$2); do
   intermed=${candidate#$1*}
   final=${intermed%%$2}
   # don't want to assume that the files are in any specific order by ls
   if [[ $final -gt $largest ]]; then
      largest=$final
   fi
done

# Now, increment and output.
largest=$(($largest+1))
touch $1$largest$2

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