CONTENT
  • CHANGES
Szukaj
counter

#top bash/shell




#top BASH / EMACS - skróty klawiaturowe


CTRL + R - reverse search (przeszukiwanie w historii poleceń: wpisujemy litery i wyszukujemy polecenie pasujące do wpisanych liter)
CTRL + A - przesunięcie kursora na początek linii
CTRL + B - przesunięcie kursora o jeden znak w lewo
CTRL + D - usunięcie znaku z pozycji kursora (jak klawisz DELETE)
CTRL + H - usunięcie znaku na lewo od kursora (jak klawisz BACKSPACE)
CTRL + V - używany do wprowadzania znaków kontrolnych informujących powłokę że następny znak jest literą, a nie poleceniem
CTRL + K - usunięcie znaków z pozycji kursora do końca linii, usuwane znaki kopiowane sa do bufora skąd moga być póżniej wklejane
CTRL + U - usunięcie znaków przed kursorem, od początu linii, usuwane znaki kopiowane są do bufora
CTRL + E - przesunięcie kursora na koniec linii
CTRL + W - usunięcie słowa na lewo od kursora
CTRL + Y - wstawienie znaków z bufora (tak jak polecenie yank)
ESC + < - wyświetlenie pierwszej pozycji z bufora poleceń
ESC + > - wyświetlenie ostatniej linii z pozycji buforan poleceń
ESC + b - przesunięcie kursora o jedno słowo w lewo
ESC + d - usunięcie słowa na prawo od kursora
ESC + f - przesunięcie kursora o jedno słowo w prawo
###(not working)ESC + DEL - usunięcie słowa na lewo od kursora


#top Przesuwanie


CTRL+A  |  CTRL+E  -  początek      |  koniec
ALT+B   |  ALT+F   -  słowo w lewo  |  słowo w prawo


#top Kasowanie


CTRL+D  |  ALT+D   -  znak   |  słowo
CTRL+U  |  CTRL+K  -  znaki po lewej  |  znaki po prawej
CTRL+H  |  CTRL+W  -  znak po lewej   |  słowo po lewej


#top Przesuwanie (visual)


   ========== ========== ========== ==========
   |          |         ||          |        |
 CTRL+A     ALT+B                  ALT+F     CTRL+E
   +---------------------+-------------------+
   |                     |                   |
   +---------------------+-------------------+



#top ENVIRONMENT



#top HISTCONTROL


HISTCONTROL="ignoredups"
Jeżeli posiada wartość ignorespace, to wiersze rozpoczynające się od znaku spacji nie są wprowadzane do listy historii. Jeśli posiada wartość ignoredups, to wiersze pasujące do ostatniego wiersza historii nie są wprowadzane. Wartość ignoreboth łączy obie te możliwości.


#top HISTSIZE


HISTSIZE="10000"
Liczba poleceń do zapamiętania w historii poleceń (zobacz HISTORIA poniżej). Wartością domyślną jest 500.


#top HISTFILE


HISTFILE=~/.bash_history
Nazwa pliku, w którym zachowywana jest historia poleceń (zobacz HISTORIA poniżej). Wartością domyślną jest ~/.bash_history. Jeśli ustawienie tej zmiennej zostanie skasowane, to historia poleceń nie będzie zachowana po zakończeniu pracy powłoki interaktywnej.


#top HISTFILESIZE


HISTFILESIZE=500
Maksymalna liczba wierszy zawartych w pliku historii. Podczas przypisywania wartości tej zmiennej, jeżeli jest to niezbędne, plik historii jest obcinany tak, by nie zawierał więcej wierszy. Domyślną wartością jest 500. Plik historii jest także obcinany do tego rozmiaru po zapisaniu go w czasie kończenia pracy przez powłokę interaktywną.


#top HISTIGNORE


HISTIGNORE
Lista rozdzielonych dwukropkami wzorców służących do decydowania, jakie wiersze poleceń powinny być zachowane w liście historii. Każdy z wzorców zakotwiczony jest na początku wiersza i musi pasować do całego wiersza (nie jest dodawane żadne niejawne '*'). Każdy z wzorców sprawdzany jest z bieżącym wierszem po wykonaniu kontroli określonych przez HISTCONTROL. Oprócz zwykłych znaków dopasowywania wzorców używanych przez powłokę, '&' dopasowuje poprzedni wiersz historii. Literał '&' można uzyskać poprzedzając go odwrotnym ukośnikiem; odwrotny ukośnik jest usuwany przed próbą dopasowania. Druga i kolejne wiersze złożonego polecenia wielowierszowego nie są sprawdzane i są dodawane do historii bez względu na wartość HISTIGNORE.


#top HOSTFILE


HOSTFILE=/etc/hosts

Zawiera nazwę pliku o tym samym formacie co /etc/hosts który pownien być czytany, gdy powłoka potrzebuje uzupełnić nazwę hosta. Listę możliwych uzupełnień można zmieniać podczas pracy powłoki. Następnym razem, gdy wykonywana jest próba uzupełnienia nazwy hosta bash dodaje zawartość nowego pliku do już istniejącej listy. Jeżeli HOSTFILE jest ustawione, ale nie posiada wartości, bash usiłuje uzyskać listę możliwych uzupełnień nazw hostów czytając /etc/hosts Gdy HOSTFILE jest unieważniane, lista hostów jest czyszczona.
example usage:
export HOSTFILE=/etc/hosts
ssh login@ <[press-tab-key-twice-to-see-sugest]>
scp login@ <[press-tab-key-twice-to-see-sugest]>
rsync login@ <[press-tab-key-twice-to-see-sugest]>


#top prompt


prompt - PROMPTING
When executing interactively, bash displays the primary prompt PS1 when it is ready to read a command, and the secondary prompt PS2 when it needs more input to complete a command.
Bash allows these prompt strings to be customized by inserting a number of backslash-escaped special characters that are decoded as follows:

\a an ASCII bell character (07)
\d the date in "Weekday Month Date" format (e.g., "Tue May 26")
\D{format} the format is passed to strftime(3) and the result is inserted into the prompt string; an empty format results in a locale-specific time representation. The braces are required
\e an ASCII escape character (033)
\h the hostname up to the first '.'
\H the hostname
\j the number of jobs currently managed by the shell
\l the basename of the shell's terminal device name
\n newline
\r carriage return
\s the name of the shell, the basename of $0 (the portion following the final slash)
\t the current time in 24-hour HH:MM:SS format
\T the current time in 12-hour HH:MM:SS format
\@ the current time in 12-hour am/pm format
\A the current time in 24-hour HH:MM format
\u the username of the current user
\v the version of bash (e.g., 2.00)
\V the release of bash, version + patch level (e.g., 2.00.0)
\w the current working directory, with $HOME abbreviated with a tilde
\W the basename of the current working directory, with $HOME abbreviated with a tilde
\! the history number of this command
\# the command number of this command
\$ if the effective UID is 0, a #, otherwise a $
\nnn the character corresponding to the octal number nnn
\\ a backslash
\[ begin a sequence of non-printing characters, which could be used to embed a terminal control sequence into the prompt
\] end a sequence of non-printing characters

The command number and the history number are usually different: the history number of a command is its position in the history list, which may include commands restored from the history file (see HISTORY below), while the command number is the position in the sequence of commands executed during the current shell session. After the string is decoded, it is expanded via parameter expansion, command substitution, arithmetic expansion, and quote removal, subject to the value of the promptvars shell option (see the description of the shopt command under SHELL BUILTIN COMMANDS below).
default PS1 on RedHat family system:
PS1="[\u@\H \W]\$ "


#top display environment variables


set
env
export



#top builtins command


#top trap


Więcej informacji w analogicznym zagadnieniu: os / bash / trap

#top eval


Więcej informacji w analogicznym zagadnieniu: os / bash / eval

#top set


Więcej informacji w analogicznym zagadnieniu: os / bash / set



#top special variables


#top __FILE__ + __LINE__


Equivalent of __FILE__, __LINE__

# FILE=/path/to/shell.sh (absolute path)
# FILE=./shell.sh (found in PWD)
# FILE=shell.sh (found in PATH)
echo FILE=$0
echo LINE=$LINENO  # line number
echo FILE=${0##*/}  # basename



#top process pid current (mypid)


pid=$$
# kill self (i.e. bash)
kill -9 $$



#top process pid in background


ping -W 10 127.0.0.1 >/dev/null &
pid=$!
echo $pid
sleep 5
kill $pid



#top process exit status


test - zwraca kod zakończenia 0 (prawda) lub 1 (fałsz) zależnie od wyniku ewaluacji wyrażenia warunkowego

Przykład:
test -e /dev/test; ret=$?; echo "ret=$ret";
Rezultat:
ret=1

Przykład:
test -f /dev/null; ret=$?; echo "ret=$ret";
Rezultat:
ret=1

Przykład:
test -c /dev/null; ret=$?; echo "ret=$ret";
Rezultat:
ret=0

Przykład:
test -b /dev/sda; ret=$?; echo "ret=$ret";
Rezultat:
ret=0



#top app exit status


Przykład: zawartość pliku app-status-exit1.sh
. /etc/init.d/functions
test -e /dev/zero
RETVAL=$?
if [ $RETVAL -ne 0 ]; then
	failure
else
	success
fi
echo

Sposób wywołania:
sh app-status-exit1.sh
Rezultat:
bash-app-status-exit-1.png


Przykład: zawartość pliku app-status-exit2.sh
. /etc/init.d/functions
test -e /dev/not_existet_dev
RETVAL=$?
if [ $RETVAL -ne 0 ]; then
	failure
else
	success
fi
echo

Sposób wywołania:
sh app-status-exit2.sh
Rezultat:
bash-app-status-exit-2.png



#top app call self


Przykład: zawartość pliku app-call-self.sh
echo $0
echo "$0"

Sposób wywołania:
sh app-call-self.sh
Rezultat:
app-call-self.sh
app-call-self.sh

Sposób wywołania:
/home/user/app-call-self.sh
Rezultat:
/home/user/app-call-self.sh
/home/user/app-call-self.sh



#top app args all


Przykład: zawartość pliku app-args-all.sh
echo "\$*=$*"
echo "\$@=$@"

Sposób wywołania:
sh app-args-all.sh a b c
Rezultat:
$*=a b c
$@=a b c



#top app args count


Przykład: zawartość pliku app-args-count.sh
echo $#
echo "$#"

Sposób wywołania:
sh app-args-count.sh a b c
Rezultat:
3
3



#top app args get


Przykład: zawartość pliku app-args-get.sh
val1=$1
shift
val2=$1
shift
val3=$1
shift

Sposób wywołania:
sh app-args-get.sh a b c
Rezultat:
val1=a
val2=b
val3=c



#top app args parse


Przykład: zawartość pliku app-args-parse.sh
val1=
val2=
val3=
while [ $# -gt 0 ];do
	case "$1" in
	-a)
		shift
		val1=$1
		shift
	;;
	-b)
		shift
		val2=$1
		shift
	;;
	-c)
		shift
		val3=$1
		shift
	;;
	*)
		break;
	;;
	esac
done
echo "val1=$val1"
echo "val2=$val2"
echo "val3=$val3"

Sposób wywołania:
sh app-args-parse.sh -a a b
Rezultat:
val1=a
val2=
val3=



#top app args validate


Przykład: zawartość pliku app-args-validate.sh
val1=
val2=
val3=
while [ $# -gt 0 ];do
	case "$1" in
	-a)
		[ -z "$2" ] && echo "$0 option -a need value" && exit
		val1=$2
		shift
		shift
	;;
	-b)
		[ -z "$2" ] && echo "$0 option -b need value" && exit
		val2=$2
		shift
		shift
	;;
	-c)
		[ -z "$2" ] && echo "$0 option -c need value" && exit
		val3=$2
		shift
		shift
	;;
	esac
done
echo "val1=$val1"
echo "val2=$val2"
echo "val3=$val3"

Sposób wywołania:
sh app-args-validate.sh -a a -b b -c c
Rezultat:
val1=a
val2=b
val3=c

Sposób wywołania:
sh app-args-validate.sh -a a -b b -c
Rezultat:
app-args-validate.sh option -c need value



#top app args options


Przykład: zawartość pliku app-args-options.sh
#!/bin/sh
OPTA=
OPTB=
OPTC=
while getopts "a:b:c:" OPTION
do
	echo "OPTION=$OPTION OPTARG=$OPTARG"
	case "$OPTION" in
	a)
	OPTA=$OPTARG
	;;
	b)
	OPTB=$OPTARG
	;;
	c)
	OPTC=$OPTARG
	;;
	esac
done
echo OPTA=$OPTA
echo OPTB=$OPTB
echo OPTC=$OPTC

Sposób wywołania:
sh app-args-options.sh
Rezultat:
OPTA=
OPTB=
OPTC=

Sposób wywołania:
sh app-args-options.sh -a aaa
Rezultat:
OPTION=a OPTARG=aaa
OPTA=aaa
OPTB=
OPTC=

Sposób wywołania:
sh app-args-options.sh -b bbb
Rezultat:
OPTION=b OPTARG=bbb
OPTA=
OPTB=bbb
OPTC=

Sposób wywołania:
sh app-args-options.sh -c ccc
Rezultat:
OPTION=c OPTARG=ccc
OPTA=
OPTB=
OPTC=ccc

Sposób wywołania:
sh app-args-options.sh -a aaa -b bbb -c ccc
Rezultat:
OPTION=a OPTARG=aaa
OPTION=b OPTARG=bbb
OPTION=c OPTARG=ccc
OPTA=aaa
OPTB=bbb
OPTC=ccc



#top read lines from stdin


Przykład:
echo -en "val1\nval2\nval3\n" | while read line;do echo "line=|$line|"; done
Rezultat:
line=|val1|
line=|val2|
line=|val3|

Przykład:
echo -en " val1\nval2 \n val3 \n" | while read line;do echo "line=|$line|"; done
Rezultat:
line=|val1|
line=|val2|
line=|val3|

Przykład:
echo -en " val1\nval2 \n val3 \n" | while IFS='\n' read line;do echo "line=|$line|"; done
Rezultat:
line=| val1|
line=|val2 |
line=| val3 |

Przykład:
echo -en "val1\nval2\nval3\n" | while read;do line=$REPLY; echo "line=|$line|"; done
Rezultat:
line=|val1|
line=|val2|
line=|val3|

Przykład:
echo -en " val1\nval2 \n val3 \n" | while read;do line=$REPLY; echo "line=|$line|"; done
Rezultat:
line=| val1|
line=|val2 |
line=| val3 |

Przykład:
while read line;do echo "line=$line"; done <<< "val1 val2 val3"
Rezultat:
line=val1 val2 val3

Przykład:
while read line;do echo "line=$line"; done <<< "val1\nval2\nval3"
Rezultat:
line=val1nval2nval3



#top IF - warunki


test === [ - man test

Przykład:
val1=value1
val2=value2

Test sprawdzający czy długość łańcucha znaków jest równa zero (pusty ciąg znaków).
if [ -z "$val1" ];then
	echo "val1=$val1"
fi

Test sprawdzający czy długość łańcucha znaków jest większa od zera (nie pusty ciąg znaków).
if [ -n "$val1" ];then
	echo "val1=$val1"
fi

Dwie alternatywne składnie iloczynu AND warunków logicznych:
if [ -n "$val1" -a -n "$val2" ];then
	echo "IF&IF:val1=$val1"
	echo "IF&IF:val2=$val2"
fi

if [ -n "$val1" ] && [ -n "$val2" ];then
	echo "IF&IF:val1=$val1"
	echo "IF&IF:val2=$val2"
fi

Dwie alternatywne składnie sumy OR warunków logicznych:
if [ -n "$val1" -o -n "$val2" ];then
	echo "IF|IF:val1=$val1"
	echo "IF|IF:val2=$val2"
fi

if [ -n "$val1" ] || [ -n "$val2" ];then
	echo "IF|IF:val1=$val1"
	echo "IF|IF:val2=$val2"
fi

Konstrukcja: IF:ELSE
if [ -n "$val1" ];then
	echo "IFIF:val1=$val1"
else
	echo "ELSE:empty val1"
fi

Konstrukcja: IF:ELSE+IF:ELSE
if [ -n "$val3" ];then
	echo "IFIF:val3=$val3"
elif [ -n "$val2" ];then
	echo "ELIF:val2=$val2"
elif [ -n "$val1" ];then
	echo "ELIF:val1=$val1"
else
	echo "ELSE:empty"
fi



#top test - check file types and compare values


( EXPRESSION ) - EXPRESSION is true
! EXPRESSION - EXPRESSION is false
EXPRESSION1 -a EXPRESSION2 - both EXPRESSION1 and EXPRESSION2 are true
EXPRESSION1 -o EXPRESSION2 - either EXPRESSION1 or EXPRESSION2 is true
-n STRING - the length of STRING is nonzero, STRING equivalent to -n STRING
-z STRING - the length of STRING is zero
STRING1 = STRING2 - the strings are equal
STRING1 != STRING2 - the strings are not equal
INTEGER1 -eq INTEGER2 - INTEGER1 is equal to INTEGER2
INTEGER1 -ge INTEGER2 - INTEGER1 is greater than or equal to INTEGER2
INTEGER1 -gt INTEGER2 - INTEGER1 is greater than INTEGER2
INTEGER1 -le INTEGER2 - INTEGER1 is less than or equal to INTEGER2
INTEGER1 -lt INTEGER2 - INTEGER1 is less than INTEGER2
INTEGER1 -ne INTEGER2 - INTEGER1 is not equal to INTEGER2
FILE1 -ef FILE2 - FILE1 and FILE2 have the same device and inode numbers
FILE1 -nt FILE2 - FILE1 is newer (modification date) than FILE2
FILE1 -ot FILE2 - FILE1 is older than FILE2
-b FILE - FILE exists and is block special
-c FILE - FILE exists and is character special
-d FILE - FILE exists and is a directory
-e FILE - FILE exists
-f FILE - FILE exists and is a regular file
-g FILE - FILE exists and is set-group-ID
-G FILE - FILE exists and is owned by the effective group ID
-h FILE - FILE exists and is a symbolic link (same as -L)
-k FILE - FILE exists and has its sticky bit set
-L FILE - FILE exists and is a symbolic link (same as -h)
-O FILE - FILE exists and is owned by the effective user ID
-p FILE - FILE exists and is a named pipe
-r FILE - FILE exists and read permission is granted
-s FILE - FILE exists and has a size greater than zero
-S FILE - FILE exists and is a socket
-t FD - file descriptor FD is opened on a terminal
-u FILE - FILE exists and its set-user-ID bit is set
-w FILE - FILE exists and write permission is granted
-x FILE - FILE exists and execute (or search) permission is granted



#top value operations



#top arithmetic


Przykład:
# Syntax for Arithmetic
value=20; let "value = $value + 4"; echo "value=$value"; # 24
value=20; let "value = $value - 4"; echo "value=$value"; # 16
value=20; let "value = $value * 4"; echo "value=$value"; # 80
value=20; let "value = $value / 4"; echo "value=$value"; # 5
value=20; let "value = $value % 4"; echo "value=$value"; # 0
value=20; let "value = $value / 3"; echo "value=$value"; # 6
value=20; let "value = $value % 3"; echo "value=$value"; # 2
value=20; let "value++"; echo "value=$value"; # 21
value=20; let "value--"; echo "value=$value"; # 19
value=20; let "value += 4"; echo "value=$value"; # 24
value=20; let "value -= 4"; echo "value=$value"; # 16
value=20; let "value *= 4"; echo "value=$value"; # 80
value=20; let "value /= 4"; echo "value=$value"; # 5

Przykład:
# Alternative Syntax for Arithmetic
value=20; value=$(( value=$value + 4 )); echo "value=$value"; # 24
value=20; value=$(( value=$value - 4 )); echo "value=$value"; # 16
value=20; value=$(( value=$value * 4 )); echo "value=$value"; # 80
value=20; value=$(( value=$value / 4 )); echo "value=$value"; # 5
value=20; value=$(( value=$value % 4 )); echo "value=$value"; # 0
value=20; value=$(( value=$value / 3 )); echo "value=$value"; # 6
value=20; value=$(( value=$value % 3 )); echo "value=$value"; # 2
value=20; value=$(( value++ )); echo "value=$value"; # 20
value=20; value=$(( value-- )); echo "value=$value"; # 20
value=20; value=$(( value+=4 )); echo "value=$value"; # 24
value=20; value=$(( value-=4 )); echo "value=$value"; # 16
value=20; value=$(( value*=4 )); echo "value=$value"; # 80
value=20; value=$(( value/=4 )); echo "value=$value"; # 5

Przykład:
# Alternative Syntax for Arithmetic
# which expr
# /usr/bin/expr
# rpm -qf /usr/bin/expr
# coreutils-5.97-19.el5
value=20; value=`expr $value + 4`; echo "value=$value"; # 24
value=20; value=`expr $value - 4`; echo "value=$value"; # 16
value=20; value=`expr $value \* 4`; echo "value=$value"; # 80
value=20; value=`expr $value / 4`; echo "value=$value"; # 5
value=20; value=`expr $value % 4`; echo "value=$value"; # 0
value=20; value=`expr $value / 3`; echo "value=$value"; # 6
value=20; value=`expr $value % 3`; echo "value=$value"; # 2

Przykład:
# condition ? value-if-true : value-if-false
value=12; let "result = (value < 15) ? 1 : 0"; echo "value=$value result=$result"; # value=12 result=1
value=18; let "result = (value < 15) ? 1 : 0"; echo "value=$value result=$result"; # value=18 result=0
value=12; let "result = (value > 15) ? 1 : 0"; echo "value=$value result=$result"; # value=12 result=0
value=18; let "result = (value > 15) ? 1 : 0"; echo "value=$value result=$result"; # value=18 result=1
value=12; let "result = (value == 15) ? 1 : 0"; echo "value=$value result=$result"; # value=18 result=1
value=15; let "result = (value == 15) ? 1 : 0"; echo "value=$value result=$result"; # value=15 result=1
value=18; let "result = (value == 15) ? 1 : 0"; echo "value=$value result=$result"; # value=18 result=0


#top floating points aritmetic


Przykład:
# floating points aritmetic
# which bc
# /usr/bin/bc
# rpm -qf /usr/bin/bc
# bc-1.06-21
echo "36.0 + 1.5" | bc # 37.5
echo "36.0 - 1.5" | bc # 34.5
echo "36.0 * 1.5" | bc # 54.0
echo "36.0 / 1.5" | bc # 21
echo "36.0 % 5" | bc # 1.0
echo "38.0 % 5" | bc # 3.0


#top string


Przykład:
# basename
NAME=`basename $0`
echo $NAME
NAME=${0##*/}
echo $NAME
Rezultat:
bash

Przykład:
# Find the name of the script
NAME=`basename $0`
if [ ${NAME:0:1} = "S" -o ${NAME:0:1} = "K" ]
then
    NAME=${NAME:3}
fi
echo $NAME
Rezultat:
bash

Przykład:
Definicja znajdująca się w skrypcie startowym w pliku /etc/rc.d/init.d/functions:
# returns OK if $1 contains $2
strstr() {
  [ "${1#*$2*}" = "$1" ] && return 1
  return 0
}
Sposób wywołania:
sh -c ' strstr() { [ "${1#*$2*}" = "$1" ] && return 1; return 0; }; if strstr "ro root=LABEL=/" "ro" ;then echo "OK"; else echo "NOK"; fi '
sh -c ' strstr() { [ "${1#*$2*}" = "$1" ] && return 1; return 0; }; if strstr "ro root=LABEL=/" "rw" ;then echo "OK"; else echo "NOK"; fi '
Rezultat:
OK
NOK

Przykład:
# substr
NAME=S12syslog
echo ${NAME:3}  # syslog
echo ${NAME:0:1}  # S
Rezultat:
syslog
S

Przykład:
# regexp: cut patter at the begin
NAME=S12syslog
echo ${NAME#S12}  # syslog
NAME=/etc/rc5.d/S12syslog
echo ${NAME#/etc/rc5.d/}  # S12syslog
echo ${NAME#/etc/rc*.d/}  # S12syslog
echo ${NAME##*/}  # S12syslog
Rezultat:
syslog
S12syslog
S12syslog
S12syslog

Przykład:
# regexp: cut pattern at the end
NAME=ip6tables
echo ${NAME%tables}  # ip6
NAME=iptables
echo ${NAME%tables}  # ip
# regexp: cut from pattern to end
NAME=ip6tables
echo ${NAME%tab*}  # ip6
NAME=iptables
echo ${NAME%tab*}  # ip
Rezultat:
ip6
ip
ip6
ip

Przykład:
DBCONN="10.41.0.50"
DBCONN="$DBCONN:"
DBHOST=${DBCONN%:*}
DBHOST=${DBHOST%:*}
DBPORT=${DBCONN#*:}
DBPORT=${DBPORT%*:}
DBPORT=${DBPORT:-3306}; echo $DBPORT
echo "DBHOST=$DBHOST  DBPORT=$DBPORT" # DBHOST=10.41.0.50 DBPORT=3306


DBCONN="10.41.0.50:"
DBCONN="$DBCONN:"
DBHOST=${DBCONN%:*}
DBHOST=${DBHOST%:*}
DBPORT=${DBCONN#*:}
DBPORT=${DBPORT%*:}
DBPORT=${DBPORT:-3306}
echo "DBHOST=$DBHOST  DBPORT=$DBPORT" # DBHOST=10.41.0.50 DBPORT=3306

DBCONN="10.41.0.50:1234"
DBCONN="$DBCONN:"
DBHOST=${DBCONN%:*}
DBHOST=${DBHOST%:*}
DBPORT=${DBCONN#*:}
DBPORT=${DBPORT%*:}
DBPORT=${DBPORT:-3306}
echo "DBHOST=$DBHOST  DBPORT=$DBPORT" # DBHOST=10.41.0.50 DBPORT=1234
Rezultat:
DBHOST=10.41.0.50 DBPORT=3306
DBHOST=10.41.0.50 DBPORT=3306
DBHOST=10.41.0.50 DBPORT=1234

Przykład:
# str_replace
NAME=S12syslog
echo ${NAME/[0-9]*/00}  # S00
echo ${NAME//[0-9]/}  # Ssyslog
echo ${NAME//[0-9]/0}  # S00syslog
echo ${NAME/[0-9][0-9]/01}  # S01syslog
# str_replace
NAME=$HOSTNAME
echo ${NAME/./_}  # xnd_nat.wbcd.pl - replaces only 1st instance in a line
echo ${NAME//./_}  # xnd_nat_wbcd_pl - replaces ALL instances in a line
Rezultat:
S00
Ssyslog
S00syslog
S01syslog
xnd_nat.wbcd.pl
xnd_nat_wbcd_pl

Przykład:
NAME=
NAME=${NAME:-default}
echo $NAME  # default
Rezultat:
default

Przykład:
unset NAME
name=${NAME-empty}
echo $name  # empty
Rezultat:
empty

Przykład:
# replace
NAME=
echo ${NAME+bash}  # bash
NAME=bash
echo ${NAME+bash}  # bash
NAME=
echo ${NAME+shell}  # shell
NAME=bash
echo ${NAME+shell}  # shell
Rezultat:
bash
bash
shell
shell



#top colors


Przykład:
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \\033[0;39m"
echo -n "[ ";${SETCOLOR_SUCCESS};echo -n "OK";${SETCOLOR_NORMAL};echo -n " ]";echo
echo -n "[ ";${SETCOLOR_FAILURE};echo -n "NOK";${SETCOLOR_NORMAL};echo -n " ]";echo
echo -n "[ ";${SETCOLOR_WARNING};echo -n "WARN";${SETCOLOR_NORMAL};echo -n " ]";echo
Rezultat:
bash-colors1.png

Przykład:
SUCCESS_COLOR="\\033[1;32m"
FAILURE_COLOR="\\033[1;31m"
WARNING_COLOR="\\033[1;33m"
NORMAL_COLOR="\\033[0;39m"
echo -e "[ ${SUCCESS_COLOR}  OK ${NORMAL_COLOR} ]"
echo -e "[ ${FAILURE_COLOR}  NOK ${NORMAL_COLOR} ]"
echo -e "[ ${WARNING_COLOR}  WARN ${NORMAL_COLOR} ]"
Rezultat:
bash-colors2.png



#top arrays


ARRAY=( "cow:moo" "dinosaur:roar" "bird:chirp" "bash:rock" )
echo "rows[@]  =${ARRAY[@]}"
echo "keys[@]  =${ARRAY[@]%%:*}"
echo "values[@]=${ARRAY[@]##*:}"
for row in ${ARRAY[@]} ; do
	KEY=${row%%:*}
	VALUE=${row##*:}
	echo "$KEY=$VALUE"
done

equal as below
ARRAY=()
ARRAY[0]="cow:moo"
ARRAY[1]="dinosaur:roar"
ARRAY[2]="bird:chirp"
ARRAY[3]="bash:rock"
echo "rows[@]  =${ARRAY[@]}"
echo "keys[@]  =${ARRAY[@]%%:*}"
echo "values[@]=${ARRAY[@]##*:}"
for row in ${ARRAY[@]} ; do
	KEY=${row%%:*}
	VALUE=${row##*:}
	echo "$KEY=$VALUE"
done
































Zmodyfikowany ostatnio: 2017/12/02 14:58:50 (6 lat temu), textsize: 26,8 kB, htmlsize: 59,7 kB

Zapraszam do komentowania, zgłaszania sugestii, propozycji, własnych przykładów, ...
Dodaj komentarzKomentarze użytkowników