Linux (21) Shell programming

Source: Internet
Author: User
Tags case statement file permissions

21.1 Why to learn shell programming

(1) Linux OPS engineers need to write shell programs for server management when managing server clusters.

(2) for Java EE and Python programmers, the need for work, your old assembly requires you to write some shell scripts to program or server maintenance, such as writing a scheduled backup of the database script.

(3) For big data programmers, it is necessary to write shell programs to manage clusters.

What is 21.2 shell?

The shell is a command-line interpreter that provides the user with an interface system-level program that sends a request to the Linux kernel to run the program, allowing the user to start, suspend, stop, or even write programs with the shell.

21.3 Shell Programming QuickStart 21.3.1 script format requirements

(1) script starts with #!/bin/bash

(2) script requires executable permissions

21.3.2 writing the first shell script

Create a shell script that outputs Hello world!


Common ways to execute 21.3.3 scripts

Mode one (enter the absolute path or relative path of the script)

(1) First to give myshell.sh script x permission

(2) Execute script


Way two (sh+ script), not recommended

Description: Do not give script x permission to execute directly


21.4 Shell variables 21.4.1 Shell variable Introduction

(1) The variables in the Linux shell are divided into, system variables and user-defined variables.

(2) System variables: $HOME, $PWD, $SHELL, $USER, and so on.

(3) Displays all variables in the current shell: set

21.4.2 the definition of shell variables

Basic syntax

(1) Defining variables: variable = value

(2) Undo variable: unset variable

Quick Start

(1) Define variable a

(2) Undo variable A

(3) Declare static variable b=2, cannot unset



21.4.3 rules for defining variables

(1) Variable names can consist of letters, numbers, and underscores, but cannot begin with a number.

(2) There must be no spaces on either side of the equals sign.

(3) Variable names are generally used in uppercase.

21.4.4 assigning the return value of a command to a variable (emphasis)

(1) c = ' ls-l/home ' anti-quote, run the command inside and return the result to the variable C

(2) d=$ (date) is equivalent to the inverse quotation mark



21.5 Setting environment Variables 21.5.1 Basic syntax

(1) export variable name = variable value (output shell variable as environment variable)

(2) Source configuration file (make the modified configuration information effective immediately)

(3) Echo $ variable name (query the value of environment variable)

21.5.2 Quick Start

(1) Defining Tomcat_home environment variables in the/etc/profile file


(2) View the value of the environment variable Tomcat_home

Note: Before outputting the tomcat_home environment variable, you need to make it effective


(3) using Tomcat_home in another shell program



21.6 position parameter Variable 21.6.1 introduction

When we execute a shell script, if we want to get the parameter information to the command line, we can use the positional parameter variable, for example:./myshell.sh 100 200, this is a command line to execute the shell, you can get the parameter information in the Myshell script.

21.6.2 Basic Syntax

$n (n is a number, and $ A represents the command itself, $1-$9 represents the first to the Nineth argument, and more than 10 of the arguments need to be enclosed in curly braces, such as ${10})

$* (this variable represents all parameters in the command line, $* all parameters as a whole)

[Email protected] (this variable also represents all parameters in the command line, but [email protected] treats each parameter differently)

$# (this variable represents the number of all parameters in the command line)

21.6.3 position parameter Variable application example

Write a shell script positionpara.sh to get the various parameter information of the command line in the script



21.7 pre-defined variables

is a variable that the shell designer has defined beforehand and can be used directly in the shell script.

$$ (Process number (PID) of the current process)

$! (The process number (PID) of the last process running in the background)

$? (The return status of the last command executed.) If the value of this variable is 0, it proves that the previous command was executed correctly, and if the value of this variable is not 0 (which is the parameter, which is determined by the command itself), it proves that the last command was executed incorrectly. )


21.8 operator

(1) "$ ((OP))" or "$[-op"

(2) Expr m + N Note that there is a space between the expr operators (+,-,*,/,%)


21.9 article judgment

[Condition] (note that there are spaces before and after condition)

#非空返回true, you can use $? authentication (0 is true,>1 to false)

(1) A comparison of two integers

= string comparison

-lt less than

-le less than or equal to

-eq equals

-GT Greater than

-ge greater than or equal to

-ne Not equal to

(2) According to the file permissions to judge

-R has Read permission "-R file"

-W has Write permission

-X has permission to execute

(3) Judging by file type

-F file exists and is a regular file

-E File exists

-D file exists and is a directory



21.10 Process Control 21.10.1 if judgment

If [conditional judgment]
Then
Program
elif [Conditional Judging type]
Then
Program
Fi

NOTE: [Conditional judgment], there must be a space between the brackets and the conditional judgment



21.10.2 Case Statement

Case $ variable name in

"Value 1")

If the value of the variable equals the value 1, execute the program 1

;;

"Value 2")

If the value of the variable equals the value 2, execute the program 2

;; *)

If the value of the variable is not the above value, the program is executed

;;

Esac



21.10.3 for Loop

Basic Syntax 1:

For variable in value 1 value 2 value 3 ...

Do

Program

Done



Basic Syntax 2:

for (initial value; cyclic control condition; variable change)

Do

Program

Done



21.10.4 while loop

While [conditional-judging]

Do

Program

Done



21.11 Read console input

Read (options) (parameters)

Options:

-P: Specifies the prompt to read the value;

-T: Specifies the time to wait (in seconds) to read the value, and no longer waits if it is not entered within the specified time.

Parameters

Variable: Specifies the variable name of the Read value



21.12 functions

Shell programming, like other programming languages, has system functions and can also customize functions.

System functions

BaseName (returns the last part of the full path, often used to get the file name)

basename [pathname] [suffix]

basename [string] [suffix]

Suffix is a suffix, and if suffix is specified, basename will remove suffix from pathname or string.

DirName (returns the previous part of the full path, often used to return the LU path portion)

DirName file Absolute Path (removes the file name (part of the non-directory) from the given file name containing the absolute path, and then returns the remaining path (part of the directory))


Custom functions

[function] funname[()]

{

Action;

[Return int;]

}

Call Direct Write function name: funname [value]



21.13 Shell Programming Comprehensive case

Requirements Analysis:

(1) Daily 2:10 Backup database DB1 to/data/backup/db

(2) The backup start and the end of the backup can give the corresponding prompt information

(3) The backup file requires the backup time as the file name and is packaged as a. tar.gz form, such as 2018-05-04_154833.tar.gz

(4) At the same time as the backup, check whether there are 10 days ago Backup database files, if any, delete them.

The script code is as follows (mysql_db_backup.sh):

#!/bin/bash

#完成数据库的定时备份.

#备份的路径

backup=/data/backup/db

#当前的时间作为文件名

datetime=$ (Date +%y_%m_%d_%h%m%s)

#可以输出变量调试

#echo ${datetime}

echo "======= Start Backup ========"

echo "The path to the ======= backup is $BACKUP/$DATETIME. tar.gz"

#主机

Host=localhost

#用户名

Db_user=root

#密码

db_pwd=123456

#备份数据库名

Database=db1

#创建备份的路径

#如果备份的路径文件夹存在, use it, or create

[!-D "$BACKUP/$DATETIME"] && mkdir-p "$BACKUP/$DATETIME"

#执行mysql的备份数据库的指令

Mysqldump-u${db_user}-p${db_pwd}--host= $HOST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME. sql.gz

#打包备份文件

CD $BACKUP

TAR-ZCVF $DATETIME. tar.gz $DATETIME

#删除临时目录

RM-RF $BACKUP/$DATETIME

#删除10天前的备份文件

Find $BACKUP-mtime +10-name "*.tar.gz"-exec rm-rf {} \;

echo "===== backup file successfully ==========="

Attention:

Sometimes when the MySQL program is installed, the direct Input command mysql or mysqldump will find that the prompt command does not exist, this is because the system will default to find the command under/usr/bin, if this command is not in this directory, of course, will not find the command

solutions;

First you need to know the full path to the MySQL command or mysqldump command, and you can use the Find command to find

Find/-name Mysql-print

For example, the path to MySQL is:/usr/local/mysql/bin/mysql, and then map a link to the/usr/bin directory, the equivalent of creating a linked file

Ln-s/usr/local/mysql/bin/mysql/usr/bin






Follow the public number: Java Back-end life, dry article the first time to send!


Linux (21) Shell programming

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.