每次调用脚本时,我都需要创建一个在shell(bash)脚本中使用的计数器 包含的数字必须增加一个,数字应保持为六位数,所以初始值为000000,然后是000001,然后是000002等等..... 我正在做的是,我创建了一个名为'counter'的文件,它在第一行包含一个6位整数。 所以从脚本我有这个代码:
index= cat /path/counter | tail -1 #get the counter
tmp=`expr $index + 1` #clone and increase the counter
echo "" >/path/counter #empty the counter
echo ${tmp} >/path/counter #insert clone
问题是它不能在第二步工作,可能是实际失败的第一步,你有建议吗?
选项如下:
#!/bin/bash
read index < /path/counter
declare -i tmp=index+1
printf "%06d" $tmp > /path/counter
问题是它只将文件的内容提升到000007,之后我得到:
-bash: 000008: value too great for base (error token is "000008")
任何建议?
答案 0 :(得分:3)
你没有正确阅读索引。尝试:
index=$(tail -1 /path/counter)
其他注意事项:
cat
,tail
可以自行处理tmp=$(expr ...)
echo ""
,>
重定向会截断文件要使数字宽6位,请尝试printf
而不是echo
:
printf "%06d", $index
答案 1 :(得分:2)
bash有一种机制,您可以在其中指定数字的基础
#!/bin/bash
file=/path/to/counter
[[ ! -f "$file" ]] && echo 0 > $file # create if not exist
index=$(< "$file") # read the contents
printf "%06d\n" "$((10#$index + 1))" > "$file" # increment and write
答案 2 :(得分:1)
这也可以:
#!/bin/bash
if [ -e /tmp/counter ]
then
. /tmp/counter
fi
if [ -z "${COUNTER}" ]
then
COUNTER=1
else
COUNTER=$((COUNTER+1))
fi
echo "COUNTER=${COUNTER}" > /tmp/counter
echo ${COUNTER}
答案 3 :(得分:1)
[更新:修复为在文本文件中包含一个明确的基本标记,但格伦杰克曼打败了我。]
您可以稍微简化一下:
read index < /path/counter # Read the first line using bash's builtin read
declare -i tmp=index+1 # Set the integer attribute on tmp to simplify the math
printf "10#%06d" $tmp > /path/counter # No need to explicitly empty the counter; > overwrites
或者,您甚至不需要临时变量来保存递增的值:
read index < /path/counter
printf "10#%06d" $(( index+1 )) > /path/counter
答案 4 :(得分:0)
解决了
index=$(cat /path/counter| tail -1)
tmp=$(expr $index + 1)
printf "%06d" $tmp > /path/counter