зеркало из
				https://github.com/iharh/notes.git
				synced 2025-11-04 07:36:08 +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 - )
 | 
						||
 | 
						||
 |