====== Bash things to remember ====== The comma operator is kind of cool echo one{,two{,three}{,four}}five onefive onetwofive onetwofourfive onetwothreefive onetwothreefourfive Last command error steve@steve-thinkpad:~$ echo $? 0 steve@steve-thinkpad:~$ blah bash: blah: command not found steve@steve-thinkpad:~$ echo $? 127 colon operator is a nop that returns true. Has many uses. Parenthesis designate a command group (a=hello; echo $a) or provide array initialization. Array=(element1 element2 element3) A command may act upon a comma-separated list of file specs within braces. echo \"{These,words,are,quoted}\" # " prefix and suffix # "These" "words" "are" "quoted" cat {file1,file2,file3} > combined_file # Concatenates the files file1, file2, and file3 into combined_file. cp file22.{txt,backup} # Copies "file22.txt" to "file22.backup" \<, \> word boundary in a regular expression. bash$ grep '\' textfile for a in charon titan; do ssh $a 'hostname;cat /proc/cpuinfo |grep -e "model name" -e "cpu MHz" |sort -r|uniq;cat /proc/meminfo |grep "MemTotal"|uniq'; done || as a error detector cd /blah || echo test cd /etc || echo test && as a error detector to halt further execution cd /blah && echo $PWD cd /etc && echo $PWD error status echo hello echo $? # Exit status 0 returned because command executed successfully. lskdf # Unrecognized command. echo $? # Non-zero exit status returned because command failed to execute. ---- http://www.cyberciti.biz/faq/bash-shell-read-a-line-field-by-field/ For each line I need to construct and execute a shell command as follows: /path/to/deviceMaker --context=$1 -m $permissions $device2 $deviceType $major $minor You can to use a while loop along with the read command, Internal Field Separator (IFS), and HERE STRINGS as follows: #!/bin/bash input=/path/to/data.txt [ $# -eq 0 ] && { echo "Usage: $0 arg1"; exit 1; } arg="$1" cmd=/path/to/deviceMaker while read -r line do IFS=, read -r f1 f2 f3 f4 f5 <<<"$line" # quote fields if needed $cmd --context="$arg" -m $f5 $f1 $f2 $f3 $f4 done <"$input" ---- ====== ping FOR loop network scan ====== These have a bug in them. It tries to scan 192.168.2.echo. for i in `seq 1 254` ; do ping -c 1 -w 1 -n 192.168.2.$i > /dev/null && echo 192.168.2.$i ; done for i in {1..254} ; do ping -c 1 -w 1 -n 192.168.2.$i > /dev/null && echo 192.168.2.$i ; done Mac version for i in {1..254} ; do ping -c 1 -W 10 -n 192.168.2.$i > /dev/null && echo 192.168.2.$i ; done