зеркало из
https://github.com/iharh/notes.git
synced 2025-10-30 05:06:05 +02:00
104 строки
2.9 KiB
Plaintext
104 строки
2.9 KiB
Plaintext
if condition; then
|
||
commands
|
||
elif condition; then
|
||
commands
|
||
else
|
||
commands
|
||
fi
|
||
|
||
The newer way of doing conditios is double brackets ([[ ... ]]).
|
||
|
||
if [[ -o interactive && -t 0 ]]; then
|
||
mesg y
|
||
fi
|
||
|
||
Conditional Expression Operators:
|
||
-b file - Tests if file is a block special file.
|
||
-c file - Tests if file is a character special file.
|
||
-d file - Tests if file exists and is a directory.
|
||
-e file - Tests if file exists.
|
||
-f file - Tests if file exists and is an ordinary file.
|
||
-g file - Tests if file exists and has its setgid bit set.
|
||
-k file - Tests if file exists and has its sticky bit set.
|
||
-n string - Tests if string is nonempty.
|
||
-o option - Tests if option is turned on.
|
||
-p file - Tests if file exists and is a named pipe (fifo).
|
||
-r file - Tests if file exists and is readable.
|
||
-s file - Tests if file exists and has a size greater than zero.
|
||
-t file descriptor - Tests if file descriptor is open and associated with a terminal device.
|
||
-u file - Tests if file exists and has its setuid bit set.
|
||
-w file - Tests if file exists and is writable.
|
||
-x file - Tests if file exists and is executable.
|
||
-z string - Tests if string is empty (length zero).
|
||
-G file - Tests if file exists and is owned by the current group.
|
||
-L file - Tests if file exists and is a symbolic link.
|
||
-O file - Tests if file exists and is owned by the current user.
|
||
-S file - Tests if file exists and is a socket.
|
||
file1 -ef file2 - Tests if the two filenames refer to the same file.
|
||
file1 -nt file2 - Tests if file1 is newer than file2.
|
||
file1 -ot file2 - Tests if file1 is older than file2.
|
||
string == pattern - Tests if the string matches the pattern.
|
||
string != pattern - Tests if the string doesn’t match the pattern.
|
||
string1 > string2 - Compares strings based on their ASCII values.
|
||
string1 < string2 - Compares strings based on their ASCII values.
|
||
string =~ regex - Tests if the string matches the regular expression (bash 3 only).
|
||
|
||
[[ $PWD = $HOME/* ]]
|
||
check if we are under home dir (no expansion is done at [[)
|
||
|
||
Comparing numbers:
|
||
[[ $val -ge 3 ]]
|
||
(( val >= 3 ))
|
||
|
||
|
||
case $TERM in
|
||
(aixterm|iris-ansi*)
|
||
bindkey ...
|
||
;;
|
||
(xterm|ddterm)
|
||
bindkey ...
|
||
;;
|
||
esac
|
||
|
||
[while|until] condition; do
|
||
commands
|
||
done
|
||
|
||
for ((i=1;i<5;i++)); do
|
||
a[$i]=$i
|
||
done
|
||
|
||
This is the same as a= ( {1..4} ).
|
||
|
||
repeat 5; p=${p#*/}
|
||
|
||
[break/continue] n
|
||
break n inner loops (default is one).
|
||
|
||
|
||
Commenting just out one command using colon (:)
|
||
|
||
grep -q word file && : grep -q word otherfile && echo files both contain word
|
||
here we commented out grep -q word otherfile
|
||
|
||
colon could be used for side-effects:
|
||
: ${VAR:?error: VAR not set}
|
||
: ${VAR:=default value}
|
||
|
||
|
||
Commands grouping:
|
||
|
||
{
|
||
cmd1
|
||
cmd2
|
||
} > logfile
|
||
|
||
{ sleep 3600; make; } &
|
||
|
||
|
||
Run commands in a subshell:
|
||
|
||
tar cvf - . | ( cd /somwhere/else; tart xvf - )
|
||
|
||
|