bash脚本示例
什么是shell?
shell是一个唯一的程序,它为用户提供与接受人类可读命令的内核交互的接口,然后将其转换为内核可理解的语言。
shell在Linux操作系统中,可以以命令的形式从用户输入,然后处理它,然后显示输出。
我们可以使用Linux中的终端访问shell。
shell有两类:
命令行shell
图形shell
命令行shell
可以使用命令行接口访问shell。
我们在Windows中具有(Linux或者Mac)和命令提示符中的终端(Linux或者Mac)和命令提示符以获取人类可读命令的形式,然后在相同的命令行界面中显示输出。
图形shell
图形shell为用户提供了一个图形用户界面(GUI)进行交互,执行打开,关闭,保存文件等操作。
Windows OS和Ubuntu是GUI Shell(桌面)的大示例,其中用户不必为每个操作执行命令。
仍然,在每个动作后面,都有一个shell命令执行以执行这些操作。
什么是bash shell?
Bash(Bourne再次shell)是这些天大多数Linux Distr的默认命令行解释器。
它是早期Bourne Shell的更新版本。
如果我们是Linux系统管理员或者Power用户,则必须具有良好的Bash shell命令的知识,以执行日期至日期任务。
什么是bash脚本?
主要是我们在终端中逐个使用shell命令,以获取日常任务。
仍然,有时我们必须执行复杂的任务或者重复性任务,这涉及以适当的顺序执行的一系列命令。
Shell还可以将命令作为从文件的输入占用,因此可以让我们的作业轻松,我们可以在文件中编写这些命令,可以在shell中执行它们以避免手动工作。
这些文件称为shell脚本。
让我们了解Bash shell脚本
这里是一个示例shell脚本文件:
#!/bin/sh ls
我们将名称为'list.sh'并在终端中运行它我们将使用以下命令: $bash list.sh
优点
Bash脚本有很多优势:
它自动化重复的工作,以节省大量的努力和时间。
我们可以创建电源工具或者实用程序。
Bash脚本是便携式的;我们可以在其他Linux系统上使用脚本而无需任何修改。
它具有我们在标准终端中使用的同一组语法,因此不涉及额外的学习。
我们可以快速编写Bash脚本,几乎没有帮助。
它可以提供交互式调试,同时运行任务,在错误或者问题的情况下帮助。
缺点
Bash脚本可能有缺点:
容易出错,一个错误可以改变程序的流量,可能是有害的。
慢速执行速度。
与其他编程语言不同,具有非常最小的数据结构。
不适合大型和复杂的任务。
在本文中,我们将获得Bash脚本的基本思想。
将通过简单的脚本示例解释Bash脚本的大多数广泛使用的互联网脚本操作。
Hello World 脚本
"Hello World"程序是程序员在学习任何新语言时写的第一个程序。
这是一个打印"Hello World"作为输出的程序。
因此,我们可以使(Vim或者Nano)创建文件helloword.sh,如下所示: $nano helloword.sh
现在将下行复制到"helloWorld.sh"并保存它。
#!/bin/bash echo "Hello World"
现在我们可以运行命令: $bash helloworld.sh
另一种方法是首先使文件可执行文件: $chmod a+x helloworld.sh
现在,使用以下命令运行文件。 $./helloworld.sh
2.使用echo命令
Echo命令是Linux中最常见且常用的命令。
它用于在BASH中打印文本或者输出。
它有许多操作执行不同的操作。
语法: echo [options] [ARGUMENTS]
以下选项是: -n
用于抑制尾随新行 -e
用于解释反斜杠转义字符 -E
用于禁用转义字符的解释,它是echo命令的默认选项。
创建一个新文件echo.sh并添加以下行。
#!/bin/bash echo "theitroad Linux" echo -n "I am a Linux User" echo -e "\nGood \t Bye \t All"
这里\ n是新行的转义字符,\ t是水平标签的转义字符。
3.使用注释
注释是程序员关于代码或者逻辑目的的备注。
添加注释是一个广泛的做法,以至于将来,任何人都可以通过阅读注释来了解代码。
注释是代码的一部分,但由编译器忽略。
在Bash脚本中,任何开头的行被视为注释。
例如:
#!/bin/bash # this is a comment echo "Comment Example"
当我们运行这个脚本时,编译器将忽略该行 this is a comment 。
注释可以是:
单行注释
多行注释
我们使用"#"进行单行注释,:'内容'
为多行注释。
在Bash脚本中检查单个和众多注释的以下命令。
#!/bin/bash : ' This script calculates sum of 2 and 8. ' ((sum=2+8)) # result will be echo "sum is $sum"
4.使用变量
变量是用于暂时存储值的命名符号。
它可以是我们可以在脚本中的任何位置使用的字符串或者数值。
我们可以制作变量并分配它们值。
变量名称应该是描述性的,以便我们可以理解我们创建该变量的目的。
我们在Bash脚本中有三种变量:
1.特殊变量:
以下是其他唯一的预设变量:
$#:传递给脚本的命令行参数数。
$@:发送到脚本的所有参数。
$?:最后一个进程的最终状态执行。
$$:当前脚本的进程ID。
$USER:用户执行脚本。
$hostname:执行脚本的计算机的主机名。
$SECONDS:脚本运行的秒数。
$RANDOM:返回随机数。
$lineno:返回脚本的当前行号。
2.环境变量:
要查看BASH会话中的活动环境变量,请使用命令: env | less
输出:
3.用户定义的变量:
用户定义的变量是我们脚本中由我们设置的变量。
例如,我们有变量的"年"来存储如下所示的当前年份。 year=2017
我们可以稍后使用 echo $year
你可以看到我们使用过的 $
引用其价值。
所以现在创建一个文件变量.sh并其中添加以下行。
#!/bin/bash website=www.theitroad.com year=2017 # Getting user name from special variables name=$USER echo "Welcome to $website" echo -e "Hello $name \n" echo -e "Year = $year \n" echo "Running on $HOSTNAME"
5.获取用户输入
获取用户输入对于制作脚本交互式非常重要,因此在Bash脚本中为此目的,我们使用"读取"命令。
#!/bin/bash echo"Enter Your Age" read age echo"Your age is $age"
6.使用命令参数
我们还可以从命令参数中读取用户输入,就像任何其他编程语言一样。
然后,我们可以在我们的脚本中使用这些参数为1美元,2美元等等,具体取决于我们提供的参数的数量。
创建文件'arguments.sh'并复制下面的行。
#!/bin/bash echo "Total arguments : $#" echo "Username: " echo "Age: " echo "Full Name: "
现在在其名称之后使用三个添加参数运行"arguments.sh"脚本文件。 $bash arguments.sh tuts 30 'theitroad Linux'
7.使用循环
在每个编程语言中使用循环,我们需要重复执行相同的代码。
Bash脚本中有两种类型的循环,而循环。
我们将逐个看到每个人。
while循环
虽然当我们需要重复代码行时使用未知次数,直到它满足某些条件。
以下是它的形成方式:
#!/bin/bash while [CONDITION] do [COMMANDS] done
在每次迭代执行命令之前评估条件,并且它将继续执行,直到条件评估为false,并且循环将被终止。
#!/bin/bash i=0 while [ $i -le 4 ] do echo Number: $i ((i++)) done
for循环
这 for
循环在项目列表中迭代并执行给定的一组命令。
抨击 for
循环采取以下形式:
#!/bin/bash for item in [LIST] do [COMMANDS] done
在下面的示例中,循环将迭代每个项目,并将生成变量i的表。
#!/bin/bash i=2 for (( counter=1; counter<=10; counter++ )) do ((result= $i * $counter)) echo "$i x $counter = $result" done
8.使用条件语句
条件语句是任何编程语言的基本概念之一。
我们根据满足的某些条件做出决定。
在Bash脚本中,我们有条件块。
if语句
在Bash脚本中,如果条件有多种形式,但让我们看看基本条件。
if Condition then STATEMENTS fi
我们可以查看语句是否以评估"then"和"fi"之间的条件和运行语句,否则忽略该语句。
#!/bin/bash echo -n "Enter a number: " read VAR if [[ $VAR -gt 10 ]] then echo "The variable is greater than 10." fi
在上面的示例中,将要求用户输入一个数字,如果数字超过10,则将看到输出'变量大于10',否则我们将不会看到任何内容。
if else语句
现在我们也将添加"if else"块,如果条件是假的,则会执行该块。
if Condition then STATEMENTS1 else STATEMENTS2 fi
所以我们将修改上面的示例。
#!/bin/bash echo -n "Enter a number: " read VAR if [[ $VAR -gt 10 ]] then echo "The variable is greater than 10." else echo "The variable is equal or less than 10." fi
如果执行代码并输入数字,则脚本将根据数字是否更大或者更少/等于10打印字符串。
if elif语句
Bash也有"else if"的同等语法。
if Condition1 then STATEMENTS1 elif Condition2 then STATEMENTS2 else STATEMENTS3 fi
因此修改了上面的示例后:
#!/bin/bash echo -n "Enter a number: " read VAR if [[ $VAR -gt 10 ]] then echo "The variable is greater than 10." elif [[ $VAR -eq 10 ]] then echo "The variable is equal to 10." else echo "The variable is less than 10." fi
9.使用函数
就像其他编程语言一样,Bash脚本也具有函数的概念。
它允许用户编写一个自定义代码块,需要一次又一次地重复使用。
语法:
function FunctionName() { statements }
现在,我们将创建一个函数'sum',它将从用户采取输入号,并将这些数字的总和显示为输出。
#!/bin/bash function Sum() { echo -n "Enter First Number: " read a echo -n "Enter Second Number: " read b echo "Sum is: $(( a+b ))" } Sum
10.显示字符串长度
处理字符串是Bash脚本的重要组成部分。
Bash脚本具有获得字符串变量的长度的直接方式。
在该示例中,我们将向我们展示如何在Bash脚本中获取字符串的长度。
#!/bin/bash Str="Welcome to theitroad.com" echo "Length is: ${#Str}"
11.连接字符串
Bash脚本提供了一种轻松的方法来处理字符串操作,如将多个字符串的连接到一个字符串。
在该示例中,我们将向我们展示如何做到这一点。
#!/bin/bash string1="theitroad" string2="linux.com" string=$string1$string2 echo "$string is a great website."
12.提取字符串
bash给出了从字符串中提取子字符串的方法。
以下示例说明了如何从特定位置开始解析n个字符。 ${string:position}
从$sting提取子字符串以$键 ${string:position:length}
从$位置开始从$string中提取$长度的字符串。
在下面的例子中,我们将向我们展示它的工作原理。
#!/bin/bash Str="Welcome to the theitroad.com" # Extracting string from index 15 echo ${Str:15} # Extracting string from index 15 of length 5 echo ${Str:15:5}
13.查找并替换字符串
Bash脚本有一种方便和简单的方法来查找和替换字符串中的文本。
它可以用两种方式使用: ${string/pattern/replacement}
这将仅替换给定字符串中的第一个匹配项。
要更换所有匹配项,我们将使用它如下所示: ${string//pattern/replacement}
在另一个示例中,我们将使用两个选项向我们展示输出的差异:
#! /bin/bash Str="Path of the bash is /bin/bash" # Finding and Replacing First match only echo ${filename/bash/sh} # Finding and Replacing all matches echo ${filename//bash/sh}
14.检查偶数/奇数
在我们的下一个示例中,我们将编写一个Bash脚本,该脚本将接受用户的输入号,并且如果给定的数字是偶数或者奇数,则会显示。
#!/bin/bash echo -n "Enter The Number: " read n num=$(expr $n % 2) if [ $num -eq 0 ]; then echo "It is a Even Number" else echo "It is a Odd Number" fi
15.计算数字的阶乘
以下示例将向我们展示如何使用shell脚本生成给定数字的阶乘。
#!/bin/bash echo -n "Enter Number: " read n fact=1 while [ $n -gt 1 ] do fact=$((fact * n)) n=$((n - 1)) done echo $fact
16.创建目录
以下示例将向我们展示如何从shell脚本中创建目录。
脚本将从用户获取目录名称,并将检查它是否已存在。
如果它存在,我们应该看到消息"目录存在";否则,它将创建一个目录。
#!/bin/bash echo -n "Enter directory name ->" read dir if [ -d "$dir" ] then echo "Directory exists" else `mkdir $dir` echo "Directory created" fi
17.读取文件
使用bash我们可以非常有效地读取文件。
以下示例将展示如何使用shell脚本读取文件。
使用以下内容创建名为"companies.txt"的文件。
Google Amazon Microsoft Macdonald KFC Apple
此脚本将读取上述文件并显示输出。
#!/bin/bash file='companies.txt' while read line; do echo $line done < $file
18.删除文件
使用Bash脚本,我们也可以删除文件。
在该示例中,将要求用户将文件名提供为输入,并且如果存在,将删除它。
它使用Linux RM命令在此处删除。
#!/bin/bash echo -n "Enter filename ->" read name rm -i $name echo "File Deleted"
19.打印带行计数的文件
在我们的示例中,我们将写一个Bash脚本,它将在当前目录中打印有线计数的所有文件。
#!/usr/bin/env bash for F in * do if [[ -f $F ]] then echo $F: $(cat $F | wc -l) fi done
我们可以看到我们使用A for循环来获取该文件,然后使用Cat命令计数线。
20.打印文件和文件夹编号
在下一个示例中,Linux Bash脚本查找给定目录中存在的文件数或者文件夹。
它使用Linux'find'命令。
将要求用户输入要从命令行搜索文件的目录名称。
#!/bin/bash if [ -d "$@" ]; then echo "Files found: $(find "$@" -type f | wc -l)" echo "Folders found: $(find "$@" -type d | wc -l)" else echo "[ERROR] Please try again." exit 1 fi
21.检查用户是否是root
此示例演示了一种快速的方法来了解用户是否是root或者不是来自Linux Bash脚本的root。
#!/bin/bash ROOT_UID=0 if [ "$UID" -eq "$ROOT_UID" ] then echo "You are a root user." else echo "You are not a root user" fi
我们必须使用sudo命令运行bash脚本。
22.使用bash发送邮件
我们还可以从Bash脚本发送电子邮件。
以下简单示例将展示从BASH应用程序执行此操作的方式。
#!/bin/bash recipient=”[email protected]” subject=”Greetings” message=”Welcome to theitroad” `mail -s $subject $recipient <<< $message`
它将向包含给定主题和消息的收件人发送电子邮件。
23.清理日志文件
该程序将删除/var/log目录中存在的所有日志文件。
我们可以添加更多变量来保存其他日志目录并清理它们。
#!/bin/bash LOG_DIR=/var/log cd $LOG_DIR cat /dev/null > messages cat /dev/null > wtmp echo "Logs cleaned up."
请记住,我们需要root权限来运行此Bash脚本。
24.显示服务器统计数据
此示例将向我们显示快速服务器统计信息。
作为系统管理员,此Bash脚本将获得Linux计算机的正常运行时间,最后一个登录,磁盘和内存使用情况的重要详细信息。
#!/bin/bash date echo "uptime:" uptime echo "Currently connected:" w echo "--------------------" echo "Last logins:" last -a | head -3 echo "--------------------" echo "Disk and memory usage:" df -h | xargs | awk '{print "Free/total disk: " "/" }' free -m | xargs | awk '{print "Free/total memory: " "/" " MB"}' echo "--------------------"
我们需要将脚本作为root用户运行。
25.系统维护
这个小linux shell脚本升级并自动清理系统,而不是手动执行此操作。
#!/bin/bash echo -e "\n$(date "+%d-%m-%Y --- %T") --- Starting work\n" apt-get update apt-get -y upgrade apt-get -y autoremove apt-get autoclean echo -e "\n$(date "+%T") \t Script Terminated"
我们需要将此脚本作为root用户运行。