I need to loop some values,
for i in $(seq $first $last) do     does something here done   For $first and $last, i need it to be of fixed length 5. So if the input is 1, i need to add zeros in front such that it becomes 00001. It loops till 99999 for example, but the length has to be 5.
E.g.: 00002, 00042, 00212, 012312 and so forth.
Any idea on how i can do that?
You can iterate the sequence of numbers in bash in two ways. One is by using the seq command, and another is by specifying the range in for loop. In the seq command, the sequence starts from one, the number increments by one in each step, and print each number in each line up to the upper limit by default.
As $machinenumber that is used has to have a leading zero in it for other purposes, the idea is simply to create a new variable ( $nozero ) based on $machinenumber , where leading zeros are stripped away. $machinetype is 74 for now and hasn't caused any problems before.
We can use the # operator to get the length of the string in BASH, we need to enclose the variable name enclosed in “{ }” and inside of that, we use the # to get the length of the string variable. Thus, using the “#” operator in BASH, we can get the length of the string variable.
In your specific case though it's probably easiest to use the -f flag to seq to get it to format the numbers as it outputs the list.  For example:
for i in $(seq -f "%05g" 10 15) do   echo $i done   will produce the following output:
00010 00011 00012 00013 00014 00015   More generally, bash has printf as a built-in so you can pad output with zeroes as follows:
$ i=99 $ printf "%05d\n" $i 00099   You can use the -v flag to store the output in another variable:
$ i=99 $ printf -v j "%05d" $i $ echo $j 00099   Notice that printf supports a slightly different format to seq so you need to use %05d instead of %05g.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With