bash脚本示例

时间:2020-02-23 14:37:41  来源:igfitidea点击:

什么是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用户运行。