bash脚本切换管理员_开始为系统管理员使用Bash脚本

bash脚本切换管理员

Bash外壳绝对不是唯一的外壳,但它是功能最强大的外壳之一。 对于需要开发严肃的应用程序的系统管理员来说,这是一种流行的选择,这些应用程序超出了要在系统上运行的简单命令列表的范围。 其他shell有很多很好的用途(例如,我默认使用Tcsh编写Git钩子 ),但是Bash是编写严肃脚本的简单选择,这就是原因。

功能

要在Bash脚本中创建函数,请使用关键字function


   
   
function foo {
# code here
}

函数对程序员很有用,因为它们有助于减少代码中的冗余。 代码中较少的冗余减少了所需的维护量,因为如果您需要更改值,则只需在它的功能中找到一次,而不是每次使用它。

Bash如何堆积

除了Tcsh例外,shell中的功能都得到了很好的支持。

  • Korn Shell:使用与Bash相同的语法
  • Zsh:使用与Bash相同的语法
  • Fish:使用自定义功能命令创建和操作功能
  • Tcsh:有时,您可以使用goto语句来解决Tcsh中缺少功能的问题,但这并不是最佳选择。

重新导向

在任何编程和脚本语言中,输入和输出的重定向都是非常标准的功能,当您使用Shell时,它会固有地发生。 您输入文字; 你得到输出。 有些外壳比其他外壳更健壮,而且您可能会猜到,Bash为您提供了几乎所有可以想象的选项。

基础很简单:使用一定数量的>字符重定向输出,使用一定数量的<字符重定向输入。 但是,对于特定类型的输入和输出,有一些特殊的名称。 例如,错误消息进入名为stderr的流,出于重定向的目的,该流被指定为2> 。 例如,此命令将错误消息定向到名为output.log的文件:

 $  ls / void 2 > output.log 

Bash如何堆积

与外壳程序交互时,重定向是一种非常方便的功能,尽管所有主要外壳程序都支持某种重定向方式,但并非所有功能部件在所有外壳程序中都可用。

  • Korn Shell:使用与Bash相同的语法
  • Zsh:使用与Bash相同的语法
  • 鱼:部分支持
  • Tcsh:部分支持

资源

例如,当您在Bash中使用source时,它将在当前目录中搜索您引用的文件。 如果找不到要获取的文件,则改为搜索您的PATH 。 这是一个很小的好处,但是它非常方便,因为它允许您将常用功能存储在驱动器上的集中位置,然后将您的环境视为集成开发环境(IDE)。 您不必担心函数的存储位置,因为您知道它们在/ usr / include本地等效目录中,因此无论您在何处获取它们,Bash都可以找到它们。

Bash如何堆积

当您使用source命令或缩写(和POSIX正确)时,Bash是唯一同时搜索当前目录和PATH的 shell 符号。

键绑定

许多外壳程序允许您自定义与它们的交互方式,当然,与基于文本的界面的任何交互都始于键入。 在Bash中,您可以查看当前的键盘映射:

 $  bind -V | grep keymap 

要更改键盘映射(例如,从Emacs更改为Vi):

 $  bind 'set keymap vi' 

Bash如何堆积

仅Bash和Zsh提供了用于键绑定的内置预设。

历史

Bash具有任何Shell中最健壮的命令历史界面。 Bash版本的历史记录允许进行反向搜索,快速回忆,历史记录编辑(包括按行号删除条目)等等。 所有其他外壳组合在一起都可以匹配Bash的历史接口,但是没有一个(甚至是Zsh,通常模仿Bash)也不能单独匹配。

历史操纵

历史命令不是与过去互动的唯一方法。 Bash具有丰富的速记符号集合,使您可以调用甚至修改Shell历史记录中的命令。

例如,要再次运行最新命令( &nbsp; history | tail -n1的输出,请使用由&nbsp;在此处指定的前导空格  以使历史记录命令不在您的历史记录中),您只需输入!! 进入Bash:


   
   
$ wc -w luarocks.xml
1284 luarocks.xml
$ !!
1284 luarocks.xml

要在用其他命令替换该命令的一部分时运行最新命令,可以使用字符串替换:


   
   
$ wc -w luarocks.xml
1284 luarocks.xml
$ ^-w^-l
$ wc -l luarocks.xml
214 luarocks.xml

有许多这样的快捷方式,它们全部记录在Bash手册和信息页面中。 诚然,这些技巧中的许多技巧都是针对高级用户的,他们对Bash的交互是如此重复和平凡,以致于模糊,看似随机的按键组合非常有用。 Zsh有效地模仿了Bash,但是没有其他Shell提供这种最大化的效率。

Bash如何堆积

Bash的历史命令是其他任何Shell都无法比拟的(Zsh接近,但缺少某些选项,例如按行号删除的功能)。

关联数组

大多数Shell提供创建,操作和查询索引数组的功能。 用简单的英语来说,索引数组是带有数字前缀的事物的列表。 事物列表及其分配的编号方便​​地包装在单个变量中,这使在代码中轻松“携带”它成为可能。

但是,Bash可以创建关联数组,并将这些数组与其他任何数组一样对待。 关联数组使您可以创建键和值对的列表,而不仅仅是编号的值。

关联数组的好处是键可以是任意的:


   
   
$ declare -A userdata
$ userdata [ name ] =seth
$ userdata [ pass ] =8eab07eb620533b083f241ec4e6b9724
$ userdata [ login ] = ` date --utc + % s `

查询任何键:


   
   
$ echo " ${userdata[name]} "
seth
$ echo " ${userdata[login]} "
1583362192

您期望从阵列执行的大多数常规阵列操作均可用。

Bash如何堆积

Bash是唯一为关联数组提供全面支持的外壳程序(同样,Zsh接近,但缺少列出键的功能)。

选择Bash进行Shell脚本编写

Bash中的某些便利功能不符合POSIX。 从理论上讲,这意味着您可以编写一个在没有Bash的系统上无法按预期运行的Bash脚本。 如果发生这种情况,则表示您的脚本不是“可移植的”。

但是实际上,Bash是免费的开源软件,因此无论运行Linux,BSD,OpenIndiana,Windows还是macOS,任何人都可以安装它。 安装Bash不需要用户使用Bash作为其默认shell,甚至不需要自觉启动它,因为一个好的shell脚本会在其顶部shebang行(例如#!/ bin / bash )中标识它使用的shell。

如有疑问,请在文档中包括Bash作为Shell脚本的依赖项(即使它是唯一的依赖项),以警告用户它是Bash脚本而不是通用Shell脚本。

Bash有许多便利,我发现这些因素超过了用户是否已安装Bash的担忧。 就像Python或Java或任何其他软件一样,有时也存在依赖关系。 如果您喜欢Bash并发现它的速记和快捷方式有用,请不要改变自己。

下载有关面向系统管理员的Bash脚本的电子书!

翻译自: https://opensource.com/article/20/4/bash-sysadmins-ebook

bash脚本切换管理员

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值