зеркало из
				https://github.com/iharh/notes.git
				synced 2025-10-30 21:26:09 +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 - )
 | ||
| 
 | ||
| 
 | 
