Shell programming (1)

Source: Internet
Author: User
What is shell programming?

In Linux, although there are various graphical interface tools, shell is still a very flexible tool. Shell is not only a collection of commands, but also a very good programming language. You can use shell to automate a large number of tasks. shell is especially good at system management tasks, especially for tasks that are easier to use, maintainability, and portability than efficiency.

Next, let's take a look at how shell works:

Create a script

Linux has many different shells, but we usually use bash (bourne again shell) for shell programming, because bash is free and easy to use. So in this article, all the scripts provided by the author use bash (but in most cases, these scripts can also be run in bash's big sister, bourne shell ).

Like other languages, you can use any text editor, such as nedit, kedit, emacs, and vi.

To compile our shell program.

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 editing a script, you must make it executable if you want to execute it.

To make the script executable:

Chmod + x filename

Then, you can run your script by entering:./filename.

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.

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:

Variable name = Value

You can add a dollar sign ($) before the variable to retrieve the variable value:

#! /Bin/sh
# Assign values to variables:
A = "Hello World"
# Print the content of variable:
Echo "A is :"
Echo $

Enter the preceding content in your editor and save it as a file first. Then run chmod + X first

Make it executable, and enter./first to execute the script.

This script will output:

A is:
Hello World

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 only prints "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

Many variables are automatically set by the system, which will be discussed later when these variables are used.

If you need to process mathematical expressions, you need to use programs such as expr (see below ).

In addition to the shell variables that are generally valid in the program, there are also 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.

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 in each line cut-b5-9 file.txt do not confuse with cat command, this is 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 output the results to 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/'> newtext. File

Awk: awk is used to extract fields from text files. By default, the field delimiter is a space. You can use-F to specify other separators. Cat file.txt | awk-F, '{print $1 "," $3}', which is used here as a field delimiter and prints both the First and Third fields. If the file contains the following content: Adam Bor, 34, indiakerry Miller, 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 search for 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 script:

#! /Bin/sh
# The ticks are backticks (') not normal quotes ('):
Tar-zcvf lastmod.tar.gz 'Find.-mtime-1-type f-print'

3) Process Control

If the expression "if" 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.

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.