Bash: Difference between revisions
From DWIKI
Tag: wikieditor |
mNo edit summary Tag: wikieditor |
||
| Line 15: | Line 15: | ||
*[http://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/ http://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/] | *[http://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/ http://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/] | ||
*[https://ss64.com/bash/syntax-keyboard.html Bash Keyboard Shortcuts] | *[https://ss64.com/bash/syntax-keyboard.html Bash Keyboard Shortcuts] | ||
=HOWTO= | |||
==alias== | |||
= Tips and tricks = | = Tips and tricks = | ||
Revision as of 08:42, 25 March 2026
Links
- http://www.linuxdoc.org/HOWTO/Bash-Prog-Intro-HOWTO.html
- Bash Guide for Beginners
- http://www.ling.helsinki.fi/users/reriksso/unix/shell.html
- Advanced Bash Scripting Guide
- Linux Shell Scripting Tutorial
- Aliens Bash Tutorial
Keyboard shortcuts
- Shortcuts to move faster in Bash command line
- http://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/
- Bash Keyboard Shortcuts
HOWTO
alias
Tips and tricks
Check if script is running as root
if [ $EUID -eq 0 ];then
Globbing
Globbing except strings
GLOBIGNORE="*.error.log"
String manipulation
Remove character from string
VERSION='2.3.3'
echo "${VERSION//.}"
Replace all characters in a string
Replace all x,y,z with _:
"${var//+([xyz])/_}"
requires extended pattern matching
shopt -s extglob
check if var contains substring
if [[ "$foo" =~ ".*sub.*" ]]
get first character of a string
FIRST=${STRING:0:1}
Date manipulation
Age of a file
stat -C %Y $FILE
read without while loop
The problem is scope, try
echo foo bar | { read a b;echo $b; }
check if variable is integer
if [[$foo =~ ^[0-9]+$]]
move cursor
^b move back 1 char ^f move forward 1 char alt-b move back 1 word alf-f move forward 1 word
loops
loop through range of numbers
for i in {0..10};do echo $i;done
or with variable
M=10 for i in $(seq 0 $M);do echo $i;done
exit while loop
break
skip one in loop
continue
bash history timestamp
HISTTIMEFORMAT="%y/%m/%d %T "
screen and bash history
To make sure all screens write to same history (at least on CentOS and RHEL):
echo "history -a;history -r" > /etc/sysconfig/bash-prompt-screen chmod +x /etc/sysconfig/bash-prompt-screen
In general:
export PROMPT_COMMAND='history -n'
or
export PROMPT_COMMAND="history -a; history -c; history -r; ${PROMPT_COMMAND}"
add extensions to filenames
find . -type f |while read i;do if ! $i =~ .*.txt;then mv -v $i $i.txt;fi;done
bash functions
function foo() {
echo "one: $1 two: $2"
}
foo "first param" 2
convert units
function convertunits() {
C="$1"
U="$2"
debug "converting $C $U"
case $U in
"KiB") O=$((C*1000)) ;;
"MiB") O=$((C*1000*1000)) ;;
"GiB") O=$((C*1000*1000*1000)) ;;
"TiB") O=$((C*1000*1000*1000*1000)) ;;
*) O="convert error in $U" ;;
esac
if [ -z "$O" ];then O="convert_error for unit $U";fi
echo "$O"
}
Check if disk is mounted
mountpoint /mnt/foo
Get local IP address
ip route get 1 | awk '{print $NF;exit}'
Find depth of a directory
find /foo -type d | awk -F"/" 'NF > max {max = NF} END {print max}'
List only directories
ls -d */
Small random number
echo $((RANDOM/100+1))
FAQ
unary operator expected
try qouting your vars
failing I-search backward
When stuck at that, try
^g
bash: printf: 60.29: invalid number
Check $LC_NUMERIC
Variable scope in while loop
N=0 shopt -s lastpipe foo | while read i do N=$((N+1)) etc done echo $N
