首页 > 系统相关 >30个shell脚本简单示例

30个shell脚本简单示例

时间:2023-08-18 09:14:43浏览次数:58  
标签:bin 脚本 shell 示例 30 echo bash

30个简单且常用的Linux Shell脚本命令及示例,有用~~

时代Java 2023-08-18 07:40 发表于北京

↑ 点击上面 “时代Java”关注我们,
关注新技术,学习新知识!

shell一直是类Unix系统的本地命令行解释器。它已被证明是Unix的主要功能之一,并发展成为一个全新的主题。Linux提供了各种功能强大的shell,包括Bash、Zsh、Tcsh和Ksh。这些外壳最令人惊讶的特性之一是其可编程性。创建简单而有效的Linux shell脚本来处理日常工作非常容易。

1. Hello World

程序员经常通过学习hello world程序来学习新语言。这是一个简单的程序,将字符串“HelloWorld”打印到标准输出中。然后,使用vim或nano等编辑器创建hello-world.sh文件,并将以下行复制到其中。

#!/bin/bashecho "Hello World"

保存并退出文件。接下来,您需要使用以下命令使该文件可执行。

$ chmod a+x hello-world.sh

可以使用以下两个命令中的任何一个来运行此命令。

$ bash hello-world.sh$ ./hello-world.sh

它将打印出传递给脚本内部回显的字符串。

2.使用echo打印

echo命令用于在bash中打印信息。它类似于C函数“printf”,并提供了许多常见选项,包括转义序列和重定向。将以下行复制到名为echo.sh的文件中,并使其可执行,如上所述。

#!/bin/bashecho "Printing text"echo -n "Printing text without newline"echo -e "\nRemoving \t special \t characters\n"

运行脚本以查看其功能。-e选项用于告诉echo传递给它的字符串包含特殊字符,需要扩展功能。

3.使用注释

注释对文档很有用,是高质量代码库的要求。将注释放在处理关键逻辑的代码中是一种常见的做法。要注释掉一行,只需在其前面使用#(hash)字符。例如,请查看下面的bash脚本示例。

#!/bin/bash
# Adding two values((sum=25+35))
#Print the resultecho $sum

此脚本将输出数字60。首先,在某些行之前使用#检查注释的使用方式。不过,第一行是一个例外。它被称为shebang,让系统知道在运行这个脚本时要使用哪个解释器。

4.多行注释

许多人使用多行注释来记录他们的shell脚本。在下一个名为comment.sh的脚本中检查这是如何完成的。

#!/bin/bash: 'This script calculatesthe square of 5.'((area=5*5))echo $area

注意多行注释是如何放置在内部的:“和”字符。

5.While循环

while循环构造用于多次运行某些指令。查看以下名为while.sh的脚本,以更好地理解此概念。

#!/bin/bashi=0
while [ $i -le 2 ]doecho Number: $i((i++))done

因此,while循环采用以下形式。

while [ condition ]docommands 1commands ndone

方括号周围的空格是必填的。

6.For循环

for循环是另一种广泛使用的bashshell构造,它允许用户高效地迭代代码。下面演示了一个简单的示例。

#!/bin/bash
for (( counter=1; counter<=10; counter++ ))doecho -n "$counter "done
printf "\n"

7.接收用户输入


#!/bin/bash
echo -n "Enter Something:"read something
echo "You Entered: $something"

8.If语句

if CONDITION thenSTATEMENTSfi

只有当条件为真时,才会执行这些语句。fi关键字用于标记if语句的结尾。下面显示了一个快速示例。

#!/bin/bash
echo -n "Enter a number: "
read num
if [[ $num -gt 10 ]]
then
echo "Number is greater than 10."
fi

如果通过输入提供的数字大于10,上述程序将仅显示输出。-gt表示大于;类似地-lt表示小于-le表示小于等于;且-ge表示大于等于。此外,还需要[[]]。

9.使用If Else进行更多控制

将else构造与if结合起来,可以更好地控制脚本的逻辑。下面显示了一个简单的示例。

#!/bin/bash
read nif [ $n -lt 10 ];thenecho "It is a one digit number"elseecho "It is a two digit number"fi

其他部分需要放在if的动作部分之后和fi之前。

10.使用AND运算符

AND运算符允许我们的程序检查是否同时满足多个条件。由AND运算符分隔的所有部分必须为true。否则,包含AND的语句将返回false。查看下面的bash脚本示例,以更好地了解AND的工作原理。

#!/bin/bash
echo -n "Enter Number:"read num
if [[ ( $num -lt 10 ) && ( $num%2 -eq 0 ) ]]; thenecho "Even Number"elseecho "Odd Number"fi

AND运算符由&&符号表示。

11.使用OR运算符

OR运算符是另一个关键的构造,它允许我们在脚本中实现复杂、健壮的编程逻辑。与AND相反,当OR运算符的任一操作数为真时,由OR运算符组成的语句返回真。仅当由OR分隔的每个操作数为假时,它才返回假。

#!/bin/bash
echo -n "Enter any number:"read n
if [[ ( $n -eq 15 || $n -eq 45 ) ]]thenecho "You won"elseecho "You lost!"fi

这个简单的示例演示了OR运算符如何在Linuxshell脚本中工作。只有当用户输入数字15或45时,它才会宣布用户为获胜者。||符号表示OR运算符。

12.使用El if

elif语句代表else if,并为实现链逻辑提供了一种方便的方法。通过评估以下示例,了解elif的工作原理。

#!/bin/bash
echo -n "Enter a number: "read num
if [[ $num -gt 10 ]]thenecho "Number is greater than 10."elif [[ $num -eq 10 ]]thenecho "Number is equal to 10."elseecho "Number is less than 10."fi

上面的程序是不言自明的,所以我们不会逐行剖析它。相反,更改脚本中的变量名称和值等部分,以检查它们如何一起工作。

13.case 条件

switch构造是Linux bash脚本提供的另一个强大功能。它可以用于需要嵌套条件的地方,但不希望使用复杂的if-else elif链。看看下一个例子。

#!/bin/bash
echo -n "Enter a number: "read num
case $num in100)echo "Hundred!!" ;;200)echo "Double Hundred!!" ;;*)echo "Neither 100 nor 200" ;;esac

条件写在case和esac关键字之间。*)用于匹配除100和200以外的所有输入。

14.命令行参数

在许多情况下,直接从命令shell获取参数是有益的。下面的示例演示了如何在bash中执行此操作。

#!/bin/bashecho "Total arguments : $#"echo "First Argument = $1"echo "Second Argument = $2"

运行此脚本时,在其名称后添加两个附加参数。我将其命名为test.sh,调用过程概述如下。

$ ./test.sh Hey Howdy

因此,$1用于访问第一个参数,$2用于访问第二个参数,依此类推。最后,$#用于获取参数总数。

15.使用名称获取参数

下面的示例显示了如何获取带有名称的命令行参数。

#!/bin/bash
for arg in "$@"doindex=$(echo $arg | cut -f1 -d=)val=$(echo $arg | cut -f2 -d=)case $index inX) x=$val;;Y) y=$val;;*)esacdone((result=x+y))echo "X+Y=$result"

将此脚本命名为test.sh,并按如下所示调用它。

$ ./test.sh X=44 Y=100


它应该返回X+Y=144。这里的参数存储在“$@”中,脚本使用Linuxcut命令获取它们。

16.连接字符串

字符串处理对于广泛的现代bash脚本来说非常重要。值得庆幸的是,它在bash中更加舒适,并允许以更精确、简洁的方式实现这一点。请参见下面的示例,了解bash字符串连接。


#!/bin/bash
string1="Ubuntu"string2="Pit"string=$string1$string2echo "$string is a great resource for Linux beginners."

17.字符串截取

与许多编程语言不同,bash不提供任何用于剪切字符串部分的内置函数。然而,下面的示例演示了如何使用参数展开来实现这一点。

#!/bin/bashStr="Learn Bash Commands from UbuntuPit"subStr=${Str:0:20}echo $subStr

该脚本应打印出“学习Bash命令”作为其输出。参数展开形式为${VAR_NAME:S:L}。这里,S表示起始位置,L表示长度。

18.使用cut 做截取

可以在脚本中使用Linux cut命令来截取字符串的一部分,也就是子字符串。下一个示例显示了如何做到这一点。

#!/bin/bashStr="Learn Bash Commands from UbuntuPit"#subStr=${Str:0:20}
subStr=$(echo $Str| cut -d ' ' -f 1-3)echo $subStr

19.添加两个值

在Linux shell脚本中执行算术运算非常容易。下面的示例演示了如何从用户接收两个数字作为输入并将它们相加。

#!/bin/bashecho -n "Enter first number:"read xecho -n "Enter second number:"read y(( sum=x+y ))echo "The result of addition=$sum"

如您所见,在bash中添加数字相当简单。

20.添加多个值

您可以使用循环获取多个用户输入并将其添加到脚本中。以下示例显示了这一点。

#!/bin/bashsum=0for (( counter=1; counter<5; counter++ ))doecho -n "Enter Your Number:"read n(( sum+=n ))#echo -n "$counter "doneprintf "\n"echo "Result is: $sum"

但是,省略(())将导致字符串串联而不是相加。所以,在你的程序中检查类似的情况。

21.Bash中的函数

与任何编程方言一样,函数在Linux shell脚本中扮演着重要角色。它们允许管理员创建自定义代码块以供频繁使用。下面的演示将概述函数如何在Linux bash脚本中工作。

#!/bin/bashfunction Add(){echo -n "Enter a Number: "read xecho -n "Enter another Number: "read yecho "Adiition is: $(( x+y ))"}
Add

这里我们像以前一样添加了两个数字。但在这里,我们使用了一个名为Add的函数来完成这项工作。因此,每当您需要再次添加时,只需调用此函数,而不必再次编写该部分。

22.具有返回值的函数

最神奇的功能之一是允许数据从一个函数传递到另一个函数。它在各种场景中都很有用。查看下一个示例。

#!/bin/bash
function Greet() {
str="Hello $name, what brings you to UbuntuPit.com?"echo $str}
echo "-> what's your name?"read name
val=$(Greet)echo -e "-> $val"

这里,输出包含从Greet()函数接收的数据。

23.从Bash脚本创建目录

使用shell脚本运行系统命令的能力使开发人员的工作效率大大提高。下面的简单示例将向您展示如何在shell脚本中创建目录。

#!/bin/bashecho -n "Enter directory name ->"read newdircmd="mkdir $newdir"eval $cmd

该脚本只需调用标准shell命令mkdir,并在仔细查看时将目录名传递给它。这个程序应该在文件系统中创建一个目录。您还可以传递命令以在backticks(“)内部执行,如下所示。

`mkdir $newdir`

24.确认存在后创建目录

如果当前工作目录中已包含同名文件夹,则上述程序将无法运行。例如,下面的程序将检查是否存在名为$dir的文件夹,如果找不到,则只创建一个。

#!/bin/bashecho -n "Enter directory name ->"read dirif [ -d "$dir" ]thenecho "Directory exists"else`mkdir $dir`echo "Directory created"fi

使用eval编写此程序以提高bash脚本编写技能。

25.读取文件

Bash脚本允许用户非常有效地读取文件。下面的示例将展示如何使用shell脚本读取文件。首先,创建一个名为editors.txt的文件,其中包含以下内容。

1. Vim 2. Emacs 3. ed 4. nano 5. Code

此脚本将输出上述5行中的每一行。

#!/bin/bashfile='editors.txt'while read line; doecho $linedone < $file

26.删除文件

以下程序将演示如何在Linux shell脚本中删除文件。程序将首先要求用户提供文件名作为输入,如果文件名存在,则将其删除。Linux rm命令在此处执行删除操作。

#!/bin/bashecho -n "Enter filename ->"read namerm -i $name

让我们输入editors.txt作为文件名,并在要求确认时按y。它应该删除该文件。

27.附加到文件

下面的shell脚本示例将向您展示如何使用bash脚本将数据附加到文件系统上的文件。它向早期的editors.txt文件添加了一行。

#!/bin/bashecho "Before appending the file"cat editors.txtecho "6. NotePad++" >> editors.txtecho "After appending the file"cat editors.txt

现在您应该注意到,我们直接从Linux bash脚本使用日常终端命令。

28.测试文件存在

下一个shell脚本示例显示如何检查bash程序中文件的存在。

#!/bin/bashfilename=$1if [ -f "$filename" ]; thenecho "File exists"elseecho "File does not exist"fi

我们直接从命令行传递文件名作为参数。

29.从Shell脚本发送邮件

从bash脚本发送电子邮件非常简单。下面的简单示例将演示一种从bash应用程序执行此操作的方法。

#!/bin/bashrecipient=”[email protected]subject=”Greetings”message=”Welcome to UbuntuPit”`mail -s $subject $recipient <<< $message`

它将向收件人发送包含给定主题和消息的电子邮件。

30.解析日期和时间

下一个bash脚本示例将向您展示如何使用脚本处理日期和时间。同样,Linuxdate命令用于获取必要的信息,我们的程序执行解析。

#!/bin/bashyear=`date +%Y`month=`date +%m`day=`date +%d`hour=`date +%H`minute=`date +%M`second=`date +%S`echo `date`echo "Current Date is: $day-$month-$year"echo "Current Time is: $hour:$minute:$second"

运行此程序以了解其工作原理。此外,尝试从终端运行date命令。

知识分享,时代前行!
~~ 时代Java

还有更多好文章……
请查看历史文章和官网,
↓有分享,有收获~

阅读原文 阅读 81 时代Java   ​ 收藏此内容的人还喜欢   python实用的10个自动化脚本     测试开发学习交流 不看的原因   Linux三剑客之grep命令     敏而好好学 不看的原因   关于Linux 网络抓包的一些笔记整理     山河已无恙 不看的原因     发消息    

标签:bin,脚本,shell,示例,30,echo,bash
From: https://www.cnblogs.com/cherishthepresent/p/17639454.html

相关文章

  • Linux Shell下awk,sed,cut的常用方法并在自动化运维脚本中联合运用
    AWK处理工具,它可以用于提取、处理和格式化文本数据。它的主要功能是逐行扫描文件,并根据匹配模式执行操作。AWK具有以下主要特点:读取和处理文本文件中的数据根据匹配模式执行操作逐行扫描文件打印指定的列在自动化运维脚本中,AWK可以用于处理日志文件,例如提取特定行的数据、从日志文......
  • 20230816巴蜀暑期集训测试总结
    T1这题一看就很难实现,事实也确实是这样,考场想了半个多小时没有思路,打完暴力就跳了。这道题的正解技巧和思维性很强,不是很套路,只是融合了一些线段树区间操作的思想。感觉......怎么会评蓝呢?这T4一道紫题都明显比T1好做啊!关键T1的考场通过率竟然最高!大概思路就是,变化会形......
  • 1.3 参数查询入门示例
    一、参数查询1.模板准备1)新建普通报表,新建数据集ds1,SQL语句为:SELECT*FROM销量。2)点击「模板>模板参数」,在弹出的「模板参数」设置页面中,点击添加按钮添加参数。3)双击左侧的页面中双击参数名称,将参数名设置为「地区」,在右侧的默认值处,设置默认值为「华北」,点击「确认」。......
  • shell脚本之免交互expect
    目录1.多行重定向2.Expect3.awk数组4.去除重复行实例1.多行重定向cat<<EOF#打印在屏幕上cat<<a.txt#不打印在屏幕上[root@localhost~]#cat<<EOF>HELLO>HI>OK>EOFHELLOHIOK[root@localhost~]#cat<<EOF>test#传给testHELLOHIOKEOF[r......
  • 在ubuntu中半自动安装搜狗输入法的shell脚本
    总而言之就是用脚本实现了一遍搜狗官网教程中的内容,脚本仅仅在虚拟机环境的ubuntu22中对sogoupinyin_4.2.1.145_amd64.deb测试过,不保证在其他地方还能不能正常运行。脚本启动需要用sudo命令以管理员权限执行,脚本执行完毕并重启电脑后,按Ctrl+空格键调出输入法,按Shift键切换中......
  • /proc/PID/maps 文件及示例说明
    文件及字段说明这个文件中的内容描述了进程的虚拟内存空间中的不同区域,包括代码段、数据段、堆、栈以及共享库等。每一行都代表了一个内存区域,并包含以下列:起始地址和结束地址:内存区域在虚拟内存空间中的起始地址和结束地址。权限:内存区域的访问权限,如读、写、执行等。偏移量......
  • 全选文本框示例
    一、实现效果点击全选按钮/取消全选,控制商品的全选或取消每个商品的复选框都选中后,自动勾上全选按钮,或者商品任何一个复选框没有选中,取消全选二、思路就是由大的全选按钮,控制所有的复选框小的复选框控制大的全选按钮三、js中小的复选框控制大的全选框,用到了一个css伪类......
  • PowerShell Deep Drive 2-正则审查O365安装日志
    PowerShellDeepDrive2-正则审查O365安装日志前言最近遇到一个问题,在安装O365客户端的时候,遇到安装失败的情况,需要检查O365的安装日志,确定问题。在Office365(现在称为Microsoft365)的安装过程中,系统会生成安装日志以记录安装操作的详细信息。这些日志对于排查安装问题、分析错......
  • PowerShell Deep Drive 1-禁用Windows更新服务
    防挨打Windows更新服务的必要性在以下几个方面得到超级可爱的体现哦~(。♥‿♥。)安全性:Windows更新服务是守护计算机系统安全的关键宝宝哦!微软定期发布安全补丁和更新,修修补补已知漏洞、填填系统安全缺口,......
  • AI抢饭碗!新闻集团将使用生成式AI,每周自动写3000篇新闻丨IDCF
    作者:AIGC开放社区8月1日,英国卫报消息,全球最大新闻媒体公司之一的新闻集团,将使用生成式AI每周自动创建3000篇澳大利亚本地新闻。据悉,新闻集团在内部成立了一个名为“DataLocal”的部门只有4名员工,由数据新闻编辑PeterJudd领导。该部门在生成式AI的帮助下,每周可以迅速产出3000篇新......