Sh File Syntax in CentOS

Source: Internet
Author: User

Sh File Syntax in CentOS
Introduction:
Start with 1
The program must start with the following line (must begin with the first line of the file ):
#! /Bin/sh
Symbol #! The parameter used to tell the system that the program is used to execute the file. In this example, we use/bin/sh to execute the program.
When writing a script, you must make it executable if you want to execute the script.
To make the script executable:
Compile chmod + x filename to run it with./filename.
2 Note
During shell programming, a sentence starting with # represents a comment until the end of this line. We sincerely recommend that you use annotations in your program.
If you have used annotations, you can understand the role and working principle of the script in a short time even if the script is not used for a long time.
3 variable
You must use variables in other programming languages. In shell programming, all variables are composed of strings, and you do not need to declare variables. To assign a value to a variable, you can write as follows:
#! /Bin/sh
# Assign values to variables:
A = "hello world"
# Print the content of variable:
Echo "A is :"
Echo $
Sometimes the variable name is easily confused with other words, such:
Num = 2
Echo "this is the $ numnd"
This does not print "this is the 2nd", but simply print "this is the", because shell will search for the value of the variable numnd, but there is no value for this variable. We can use curly braces to tell shell that we want to print the num variable:
Num = 2
Echo "this is the $ {num} nd"
This will print: this is the 2nd
4. Environment Variables
Variables processed by the export keyword are called environment variables. We will not discuss environment variables, because generally, only environment variables are used in the login script.
5. Shell commands and Process Control
Three types of commands can be used in shell scripts:
1) Unix command:
Although any unix command can be used in shell scripts, some more common commands are used. These commands are usually used for file and text operations.
Common command syntax and functions
Echo "some text": print the text on the screen
Ls: file list
Wc-l filewc-w filewc-c file: calculate the number of file lines. Calculate the number of words in the file. Calculate the number of characters in the file.
Cp sourcefile destfile: file copy
Mv oldname newname: rename a file or move a file
Rm file: delete an object
Grep 'pattern' file: searches for strings in a file, for example, grep 'searchstring' file.txt.
Cut-B colnum file: specify the content range of the file to be displayed, and output them to the standard output device, for example: output 5th to 9th characters per line cut-b5-9 file.txt do not confuse with cat command,
These are two completely different commands.
Cat file.txt: output file content to the standard output device (screen)
File somefile: get the file type
Read var: prompt the user to input and assign the input value to the variable.
Sort file.txt: sorts the rows in the file.txt file.
Uniq: Delete the columns in a text file, for example, sort file.txt | uniq
Expr: perform mathematical operations Example: add 2 and 3 expr 2 "+" 3
Find: search for a file. For example, search for find.-name filename-print based on the file name.
Tee: outputs data to the standard output device (screen) and files such as: somecommand | tee outfile
Basename file: returns a file name that does not contain a path, for example, basename/bin/tux.
Dirname file: the path of the returned file. For example, dirname/bin/tux will return/bin.
Head file: prints the first few lines of a text file.
Tail file: number of rows at the end of a text file
Sed: Sed is a basic search replacement program. You can read text from standard input (such as command pipeline) and
The result is output to the standard output (screen ). This command uses a regular expression (see references) for search. Do not confuse with wildcards in shell. For example, replace linuxfocus with LinuxFocus: cat text. file | sed's/linuxfocus/LinuxFocus/'> newtext. fileawk: awk to extract fields from text files. By default, the field delimiter is a space. You can use-F to specify other separators.
Catfile.txt | awk-F, '{print $1 "," $3}' is used here as a field delimiter and prints the first and third fields at the same time. If the file contains the following content: Adam Bor, 34, IndiaKerryMiller, 22, and USA, the output result is Adam Bor, IndiaKerry Miller, USA.
2) concept: pipelines, redirection, and backtick
These are not system commands, but they are really important.
The pipeline (|) uses the output of a command as the input of another command.
Grep "hello" file.txt | wc-l
Search for a row containing "hello" in file.txt and calculate the number of rows.
Here, the grep command output serves as the wc command input. Of course, you can use multiple commands.
Redirection: output the command result to a file instead of a standard output (screen ).
> Write the file and overwrite the old file
> Add it to the end of the file to retain the content of the old file.
Backlash
You can use a backslash to output a command as a command line parameter of another command.
Command:
Find.-mtime-1-type f-print
Used to find files modified in the past 24 hours (-mtime-2 indicates the past 48 hours. If you want to pack all the searched files, you can use the following linux script:
#! /Bin/sh
# The ticks are backticks (') not normal quotes ('):
Tar-zcvf lastmod.tar.gz 'Find.-mtime-1-type f-print'
3) Process Control
1. if
If the "if" expression is true, the part after then is executed:
If ....; Then
....
Elif ....; Then
....
Else
....
Fi
In most cases, you can use test commands to test the conditions. For example, you can compare strings, determine whether a file exists, and whether the file is readable...
"[]" Is usually used to represent a conditional test. Note that spaces are important. Make sure that the square brackets have spaces.
[-F "somefile"]: determines whether it is a file.
[-X "/bin/ls"]: determines whether/bin/ls exists and has the executable permission.
[-N "$ var"]: determines whether the $ var variable has a value.
["$ A" = "$ B"]: determines whether $ a and $ B are equal.
Run man test to view all types of test expressions that can be compared and judged.
Directly execute the following script:
#! /Bin/sh
If ["$ SHELL" = "/bin/bash"]; then
Echo "your login shell is the bash (bourne again shell )"
Else
Echo "your login shell is not bash but $ SHELL"
Fi
The variable $ SHELL contains the name of the logon shell. We compared it with/bin/bash.
Shortcut Operators
If you are familiar with the C language, you may like the following expressions:
[-F "/etc/shadow"] & echo "Thiscomputer uses shadow passwors"
Here & is a shortcut operator. If the expression on the left is true, execute the Statement on the right.
You can also think of it as a logical operation. In the above example, if the/etc/shadow file exists, print "This computer usesshadow passwors ". Similarly, operations (|) are also available in shell programming. Here is an example:
#! /Bin/sh
Mailfolder =/var/spool/mail/james
[-R "$ mailfolder"] ''{echo" Can not read $ mailfolder "; exit 1 ;}
Echo "$ mailfolder has mail from :"
Grep "^ From" $ mailfolder
The script first checks whether mailfolder is readable. If it is readable, the "From" line in the file is printed. If it is not readable or the operation takes effect, print the error message and exit the script. There is a problem here, that is, we must have two commands:
◆ Print error message
◆ Exit the program
We use curly braces to put the two commands together as one command in the form of an anonymous function. General functions will be mentioned below.

We can use the if expression to do anything without the sum or operator, but it is much more convenient to use the sum or operator.

Example

) Determine whether/root/test/mydir exists; 2) if not, use touch to create the file myfile, save and exit; 3) If mydir exists, determine whether the name is a file, if it is a file, delete it and create a directory named mydir, and then exit; 4) If mydir exists and is not a file, determine whether the name is a directory, if it is a directory, delete this directory.

#!/bin/bash if [ ! -e /root/test/mydir ]; then touch /root/test/myfile else if [ -f /root/test/mydir ]; then rm /root/test/mydir mkdir -p /root/test/mydir else if [ -d /root/test/mydir ]; then rm -r /root/test/mydir fi fi fi

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.