使用bash创建自己的脚本

学习Linux

无论我们使用哪种Linux发行版,“毫无疑问,我最喜欢的是Ubuntu”,只要我们开始使用该系统, 自动化需求。 那就是说:创建我们的 自己的命令 以个性化的方式执行某些命令的命令。 这种需求可能是由于某些原因造成的:

  • 简化语法 我们通常执行的命令。
  • 采取任何行动 系统中未预见到的需求 操作。
  • 顺序顺序 我们努力地重复。

虽然bash脚本可以在任何目录的/中运行,但通常 创建一个目录来托管这些脚本。 就我而言:

$ mkdir /home/pedro/.bin

我相信这个 目录(通过在名称前面加句号来隐藏) 存放我在那里使用的所有脚本。 除非另外明确指定,否则隐藏目录名称没有其他含义- 在图形模式下从文件查看器查看/ home / pedro时不会出现.

现在你必须 通知Linux,它也应该放在那儿 (/home/pedro/.bin)从终端执行的订单。

$ PATH=$PATH;/home/pedro/.bin

这样,系统将在此处查找我们的订单 直到我们结束会议. 使该协会永久化:

$ sudo nano /etc/environment

然后我们添加

:/home/pedro/.bin

在PATH行的末尾,非常重要的一点是不要忘记我们要包含的目录地址之前的冒号,因为 这是加法机制.

我们的第一个分步脚本

我们创建文件,在我的情况下是这样的:

$ touch ~/.bin/donde

要对其进行编辑,可以使用首选的编辑器或遵循以下指示:

$ gedit ~/.bin/donde &

并且我们添加以下内容:

#!/usr/bin/env bash

if [ $# -lt 1 ];
then
    echo "Necesitas pasar un parámetro"
else
    whereis $1
fi

脚本分析

我们的第一通电话 «家当»(#!/ Usr / bin / env bash) 要求Linux报告 bash外壳所在的位置 然后根据bash的要求执行下一步。 这个预防措施 可以很方便地确保 我们的脚本适用于任何安装。 另一种可能 家当 他笑了:

#!/bin/bash

它们之间的差异可能非常怪异,我将对其进行解释。 在这最后 我认为在我们的系统中 bash shell位于/ bin / bash地址。 但是,我在脚本中提出的建议 我想我不知道在哪里 bash解释器。 我要求系统为他提供该地址.

第三行:如您所见,第二行是if。 对于bash字符«$#« 包含我们从命令行传递的参数数量。 因此,»if [$#-lt 1];» 字面意思是“如果参数数量小于1”.

第四行: 然后 (从英语直译为:then),这里表明接下来会发生什么 条件评估时将执行 if 是真实的:换句话说,参数的数量小于1,即为零。

第五行:如果我们执行的脚本没有任何参数,我们将在终端“您需要传递参数”中显示。

第六行:指示将执行以下操作 当我们声明的条件不成立时.

第七行:硒 运行命令«哪里« 伴随着我们通过的内容 第一个参数.

第八行:带有«fi»表示块结束 if.

测试我们的脚本

重要的是 添加写权限 脚本:

$ chmod -x ~/.bin/donde

否则,将出现“权限被拒绝”错误。。 之后,我们可以运行脚本。

$ donde php

它应该向我们显示php二进制文件的位置,它们的源文件和手册页。 像这样的东西:

php: /usr/bin/php7.0 /usr/bin/php /usr/lib/php /etc/php 
/usr/share/php7.0-readline /usr/share/php7.0-json /usr/share/php7.0-opcache 
/usr/share/php7.0-common /usr/share/php /usr/share/man/man1/php.1.gz

翻盖

  • 我们启用 目录“ .bin”来存放我们的脚本.
  • 我们提供 提供给Linux的信息,以便在命令搜索中包含此目录.
  • 我们创建脚本。
  • 之间的区别 不同 家当.
  • 用于 $#传递的参数数量.
  • 用于 第一个参数 $1.

我希望并希望该脚本对您有用。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   米格尔

    很好,解释也很好,但是参数指的是什么?

    1.    Pedro Ruiz Hidalgo的占位符图像

      谢谢米格尔!

      我可以通过参数了解提供给程序,功能或系统的所有补充信息。 因为这可能很麻烦,所以让我列举一些例子。

      在将文件a.txt复制到文件b.txt的linux命令中,我们将编写以下内容:

      $cp a.txt b.txt

      此处的cp程序接收两个参数,它们是两个文件的名称,第一个(必须存在)a.txt和第二个b.txt。

      另一个示例:如果您使用以下命令从控制台发送打印信息

      $ lp文件.pdf

      在这种情况下,“ file.pdf”是lp程序的参数。

      希望我能解决您的疑问。

      问候

  2.   米格尔

    我的评论没有出来,这是一种缺乏尊重,我不回到这个论坛。

    1.    Pedro Ruiz Hidalgo的占位符图像

      我不知道发生了什么事,无论如何这本已经出版了。

      问候。