Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- ################# this script creates an outfile with "val" number of lines of digits with the columns aligned . val can be set to what you want
- ################# but formating only works to 999 so far , but its eay to extend,
- ################# WARNING: you will still need to edit the outfile to add or remove the final last digits to the desired final number
- ################# since this script cant perfectly write to 64,128,256,512... and such
- ################# mike , undergrad, friday,4th,2011.
- ################# hope it makes your work easier!!
- if [ $# -eq 0 ]
- then
- echo " "
- fi
- myarray=(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20)
- count=0
- n=0
- val=25 ######### change this to the number of lines you want ie if 1..50 , val~3 since there are
- ######### roughly five lines of digits
- echo -n " even or odd ? "
- read -e TYPE
- if [ "$TYPE" = "even" ]
- then let type=2
- else let type=1
- fi
- tens=99
- hundreds=999 ######### you would need to add other variables like this to extend column alignment to greater than 999
- i=0
- if [ "$type" -eq 2 ]; then ########### for the even list of digits
- echo >> outfile$type
- for i in ${myarray[@]}
- do
- if (( ("$i" % 2) == "0" )); then
- sed '$s/$/ '$i'/' -i outfile$type
- # echo $i
- if [ "${myarray[$i]}" -gt "10" ] ; then
- sed '$s/$/ /' -i outfile$type
- else sed '$s/$/ /' -i outfile$type ######this adjusts the space between the ones digits , space is added or removed bbetween the forward slashes
- fi
- fi
- done
- echo >> outfile$type
- while [ $n -le $val ]
- do
- for i in ${myarray[@]}
- do
- myarray[$count]=`expr $i + 20`
- ((count++))
- done
- count=0
- for i in ${myarray[@]}
- do
- if (( ("$i" % 2) == "0" )) ; then ################ check if its odd or even
- sed '$s/$/ '$i'/' -i outfile$type
- if [ "${myarray[0]}" -le "$tens" ] ; then
- sed '$s/$/ /' -i outfile$type ######### this adjusts space between the tens digits to be aligned with the ones digits
- elif [ "${myarray[0]}" -le "$hundreds" ]; then
- sed '$s/$/ /' -i outfile$type ######### this adjusts the space between the hundreds digits to be aligned with the ones & tens
- ######## you would add such elifs from here to extend the column alignment beyond 999
- else
- sed '$s/$/ /' -i outfile$type ######## adjusts space after hundreds
- fi
- fi
- done
- echo >> outfile$type
- let n++
- done
- else ############## for odd numbers
- echo >> outfile$type
- for i in ${myarray[@]}
- do
- if (( ("$i" % 2) != "0" )); then
- sed '$s/$/ '$i'/' -i outfile$type
- if [ "${myarray[$i]}" -gt "10" ]; then
- sed '$s/$/ /' -i outfile$type
- else sed '$s/$/ /' -i outfile$type ######this adjusts the space between the ones digits , space is added or removed bbetween the forward slashes
- fi
- fi
- done
- echo >> outfile$type
- while [ $n -le $val ]
- do
- for i in ${myarray[@]}
- do
- myarray[$count]=`expr $i + 20`
- ((count++))
- done
- count=0
- for i in ${myarray[@]}
- do
- if (( ("$i" % 2) != "0" )) ; then ################ check if its odd or even
- sed '$s/$/ '$i'/' -i outfile$type
- if [ "${myarray[0]}" -le "$tens" ] ; then
- sed '$s/$/ /' -i outfile$type ######### this adjusts space between the tens digits to be aligned with the ones digits
- elif [ "${myarray[0]}" -le "$hundreds" ]; then
- sed '$s/$/ /' -i outfile$type ######### this adjusts the space between the hundreds digits to be aligned with the ones & tens
- ######## you would add such elifs from here to extend the column alignment beyond 999
- else
- sed '$s/$/ /' -i outfile$type ######## adjusts space after hundreds
- fi
- fi
- done
- echo >> outfile$type
- let n++
- done
- fi
- this is the error message thought the script does what its intended to do:
- ./Onetofive: line 40: [: : integer expression expected
- funny thing is that it only gives the error message when i choose the "even"
- choice , but still does what its intended, the "odd" does not give any error message
- i'v highlighted line 40
- here is what it gives with "set -x"
- + ./Onetofive
- even or odd ? even
- ./Onetofive: line 40: [: : integer expression expected
- ++ echo -ne '\033]0;mike@localhost:~/work/worksub/scripts'
- here is part of the debug output:
- ...
- + for i in '${myarray[@]}'
- + (( (15 % 2) == 0 ))
- + for i in '${myarray[@]}'
- + (( (16 % 2) == 0 ))
- + sed '$s/$/ 16/' -i outfile2
- + '[' 17 -gt 10 ']'
- + sed '$s/$/ /' -i outfile2
- + for i in '${myarray[@]}'
- + (( (17 % 2) == 0 ))
- + for i in '${myarray[@]}'
- + (( (18 % 2) == 0 ))
- + sed '$s/$/ 18/' -i outfile2
- + '[' 19 -gt 10 ']'
- + sed '$s/$/ /' -i outfile2
- + for i in '${myarray[@]}'
- + (( (19 % 2) == 0 ))
- + for i in '${myarray[@]}'
- + (( (20 % 2) == 0 ))
- + sed '$s/$/ 20/' -i outfile2
- + '[' '' -gt 10 ']'
- Onetofive: line 40: [: : integer expression expected
- + sed '$s/$/ /' -i outfile2
- + echo
- + '[' 0 -le 5 ']'
- ...
- everything seems to go ok until ${myarray[@]} seems to evaluate to an empty '' how does does that happen? and why just for "even" the array just has digits 1..20
- 2 4 6 8 10 12 14 16 18 20
- 22 24 26 28 30 32 34 36 38 40
- 42 44 46 48 50 52 54 56 58 60
- 62 64 66 68 70 72 74 76 78 80
- 82 84 86 88 90 92 94 96 98 100
- 102 104 106 108 110 112 114 116 118 120
- 122 124 126 128 130 132 134 136 138 140
- 142 144 146 148 150 152 154 156 158 160
- 162 164 166 168 170 172 174 176 178 180
- 182 184 186 188 190 192 194 196 198 200
- 202 204 206 208 210 212 214 216 218 220
- 222 224 226 228 230 232 234 236 238 240
- 242 244 246 248 250 252 254 256 258 260
- 262 264 266 268 270 272 274 276 278 280
- 282 284 286 288 290 292 294 296 298 300
- 302 304 306 308 310 312 314 316 318 320
- 322 324 326 328 330 332 334 336 338 340
- 342 344 346 348 350 352 354 356 358 360
- 362 364 366 368 370 372 374 376 378 380
- 382 384 386 388 390 392 394 396 398 400
- 402 404 406 408 410 412 414 416 418 420
- 422 424 426 428 430 432 434 436 438 440
- 442 444 446 448 450 452 454 456 458 460
- 462 464 466 468 470 472 474 476 478 480
- 482 484 486 488 490 492 494 496 498 500
- 502 504 506 508 510 512 514 516 518 520
- 522 524 526 528 530 532 534 536 538 540
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement