[Linuxcommand-announce] [LinuxCommand.org: Tips, News And Rants] Prompt Tricks 2
Brought to you by:
bshotts
|
From: William S. <bs...@pa...> - 2010-02-13 15:19:34
|
I'm a little behind because of all the snow, but fortunately ace book
reviewer Mark Polesky has come to my rescue with some feedback on my
previous post. He writes:
That's a pretty cool script, but the formatting of the
output is a little sloppy. If nothing else this line is in
the wrong place:
printf '\033[0m'
Here's a much cleaner version using bash.
- Mark
* * * * * * * * * *
#!/bin/bash
# prompt-colors -- demonstrate prompt color combinations.
for attr in 0 1 4 5 7; do
echo
printf "ESC[%s;Foreground;Background\n" $attr
for fore in {30..37}; do
for back in {40..47}; do
printf '\033[%s;%s;%sm %02s;%02s ' \
$attr $fore $back $fore $back
done
printf '\033[0m\n'
done
echo
done
Good job, Mark (he has become a real command line ninja since he read
my book from cover to cover as a reviewer).
One of the interesting things Mark did in converting the script from
plain sh to bash was to employ brace expansion in the for commands. For
example:
for fore in {30..37}; do
This expansion results in a sequence of numbers from 30 to 37
inclusive, a good technique to know.
But what if you need to produce a sequence of number that increment by
a value other than one? Let's say that you only wanted odd numbers from
1 to 7? In this case, you could code the sequence literally:
for i in 1 3 5 7; do
That's easy, but what about a sequence from 1 to 777? Not so easy.
To produce a large sequence, you can use the seq command. It works like
this:
seq [-options] [first [increment]] last
where first is the first number in the desired sequence, increment is
the size of the step between each member of the sequence and last is
the last number in the sequence. For example, to produce a sequence of
odd numbers from 1 to 777, we would do this:
for i in $(seq 1 2 777); do
The seq command is also handy if you need to ensure that a script can
run under sh since sh lacks the brace expansion feature of bash.
Well, that's all I have. Got to get back to shoveling!
Further Reading
- Chapter 8 of The Linux Command Line
- The seq man page
--
Posted By William Shotts to LinuxCommand.org: Tips, News And Rants at
2/13/2010 10:19:00 AM |