How to use the Linux shell if statement [reprint]

Source: Internet
Author: User
Tags locale sorts

The syntax for the most streamlined if command is: if TEST-COMMANDS; then CONSEQUENT-COMMANDS; fiafter the Test-command executes and its return status is 0, the consequent-commands executes. The return status is the exit state of the last command, or 0 if no condition is true. Test-command often includes comparison tests of numbers and strings, but it can also be any command that returns status 0 on success or returns some other state when it fails. Unary expressions are often used to check the state of a file. If a feature is primaries, the FILE parameter is /dev/fd/N in this form, then the file descriptor "N" is checked. stdin, stdout and stderr their respective file descriptors can also be used for testing. 7.1.1.1. And if expressions are usedThe following table contains an overview of what constitutes a test-command command or a list of commands, called feature primaries. These primaries are placed in square brackets to represent a test of a conditional expression. Table 7.1. Main expression
Primary meaning
[ -a FILE ] FILEtrue if it exists.
[ -b FILE ] True if it FILE exists and is a block special file.
[ -c FILE ] FILEtrue if a special file is present and is a word.
[ -d FILE ] True if it FILE exists and is a directory.
[ -e FILE ] FILEtrue if it exists.
[ -f FILE ] True if it FILE exists and is an ordinary file.
[ -g FILE ] FILEtrue if Sgid is present and has been set.
[ -h FILE ] True if it FILE exists and is a symbolic connection.
[ -k FILE ] True if the FILE sticky bit is present and has been set.
[ -p FILE ] True if it FILE exists and is a name pipe (f if o).
[ -r FILE ] True if it FILE exists and is readable.
[ -s FILE ] FILEtrue if it exists and the size is not 0.
[ -t FD ] True if the file descriptor is FD open and points to a terminal.
[ -u FILE ] True if the FILE suid (set user ID) is present and set.
[ -w FILE ] FILEtrue if FILE exists and is writable.
[ -x FILE ] True if it FILE exists and is executable.
[ -O FILE ] FILEtrue if it exists and is a valid user ID.
[ -G FILE ] FILEtrue if it exists and is a valid user group.
[ -L FILE ] True if it FILE exists and is a symbolic connection.
[ -N FILE ] If FILE an and has been mod is present, if the IED since it is last read is true.
[ -S FILE ] True if it FILE exists and is a socket.
[ FILE1 -nt FILE2 ] if have FILE1 been changed more recently than FILE2 , or if FILE1 FILE2 does not is true. exists and
[ FILE1 -ot FILE2 ] True if it is FILE1 older than it is FILE2 , or FILE2 exists and FILE1 does not exist.
[ FILE1 -ef FILE2 ] FILE1true if and FILE2 point to the same device and node number.
[ -o Optionname] True if the shell option "Optionname" is turned on.
[ -zSTRING] "STRING" is true if the length is zero.
[ -nString] or [string] The length of "STRING" is not 0 Non-zero is true.
[STRING1 = = STRING2] If 2 strings are the same. "=" May is used instead of "= =" for strict POSIX compliance is true.
[STRING1! = STRING2] True if the strings are not equal.
[STRING1 < STRING2] If the "STRING1" sorts before "STRING2" lexicographically the current locale is true.
[STRING1 > STRING2] If the "STRING1" sorts after "STRING2" lexicographically the current locale is true.
[ARG1 OP ARG2] "OP" is one -eq of,,, -ne -lt -le , -gt or -ge . These arithmetic binary operators return true if "ARG1" is equal to, not equal to, less than, less than or equal to, grea ter than, or greater than or equal to "ARG2", respectively. "ARG1" and "ARG2" are integers.
expressions can be combined with the following operators to reduce the sequence: listed in decreasing order of precedence: table 7.2. Combining Expressions
Operation Effect
[! EXPR] EXPR is False then true.
[(EXPR)] < Span style= "font-size:large;" > Returns the value of EXPR . This can be used to ignore the normal operator precedence.
[expr1-a EXPR2] if EXPR1 and EXPR2 are true.
[expr1-o EXPR2] EXPR1 or EXPR2 is true.
the [ (or test) built-in command evaluates a conditional expression using a series of rules based on the number of parameters. More information on this topic can be found in the bash documentation. Just like if you end up using fi , you have to end up with ">" After the condition is finished. 7.1.1.2. Commands for subsequent then statements consequent-commands lists the following then statements can be any valid UNIX command, any executable program, any executable shell script, or any shell statement, except Fi. 。 It is important to remember that then and fi are considered separate statements inside the shell. Therefore, when used on the command line, they are separated by semicolons. in a script, the different parts of an if statement are usually well delimited. Here are some simple examples:7.1.1.3. Checking FilesThe first example checks for the existence of a file:
anny ~>msgcheck.sh#!/bin/bash
echo "This scripts checks the existence of the messages file." Echo Checking ... "if [-f/var/log/messages] then echo "/var/log/messages exists." Fi echo echo "... done."
anny ~> ./msgcheck.sh This scripts checks the existence of the messages file. Checking./var/log/messages exists.
7.1.1.4. Check shell OptionsAdd to your bash configuration file:
# These lines would print a message if the Noclobber option is set:
If [-o noclobber] then

7.1.2.2. Comparison of Numbers
The following example uses a numerical comparison:
anny >num=`wc -l work.txt`
anny >$num201
anny >[ "$num" -gt "150" ]More input>"you‘ve worked hard enough for today."More input>echo; Fi
You ' ve worked hard enough for today.
anny >
This script is executed every Sunday by Cron. If the number of weeks is even, he reminds you to clean the Trash box:
#!/bin/bash
# Calculate the week number using the date command:
weekoffset=$[$ (date + "%V")% 2]
# Test If we have a remainder. If not, the is a even week so send a message. # Else, do nothing.
If [$WEEKOFFSET-eq "0"]; Then Echo ' Sunday evening, put out the garbage cans. ' | mail-s ' garbage cans out ' [email protected]_domain.org
7.1.2.3. String ComparisonsAn example of testing a user ID by comparing strings:
If ["$ (whoami)"! = ' root ']; Then         echo "You had no permission to run $ as Non-root user."         
with bash, you can shorten such a structure. Here is the streamlined structure for the above tests:
similar to the "&&" expression that is executed if the test is true, "| |" Specifies that the test is false on execution. An expression similar to "&&" indicates the action taken when two test conditions are true, "| |" indicates the actions taken when the test is false. Regular expressions can also be used in comparisons:
anny >gender="female"
anny >[[ "$gender" == f* ]]More input>"Pleasure to meet you, Madame."; Fi


Shell if command parameter description-B Returns True when file exists and is a block file
-C Returns True when file exists and is a character
-D returns True when pathname exists and is a directory
-E Returns True when a file or directory specified by pathname is present
-F Returns True when file exists and is regular
-G returns True when the file or directory specified by pathname is present and the Sgid bit is set
-H Returns True when file exists and is a symbolic link file, this option is not valid on some old systems
-K returns True when a file or directory specified by pathname exists and the "sticky" bit is set
-P Returns True when file exists and is a command pipeline
-R Returns True when the file or directory specified by pathname is present and readable
-s when file size is larger than 0 o'clock returns true
-U returns True when the file or directory specified by pathname is present and the SUID bit is set
-W Returns True when the file or directory specified by pathname exists and is executable. A directory must be executable for its content to be accessed.
-O Returns True when the file or directory specified by pathname is present and is owned by the user specified by the active user ID of the current process.

Compare character notation:
-eq equals
-ne Not equal to
-GT Greater than
-lt less than
-le less than or equal to
-ge greater than or equal to
-Z Empty string
* = Two characters equal
*! = Two characters Range
*-N Non-empty string




Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.