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脚本切换管理员

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

  1. python交叉编译的配置 脚本怎么写_如何写一个简单的脚本并配置

    什么是脚本: 脚本就是一个给计算机照着做的东西 cd ~/desktop 回到桌面 mkdir demo 创建一个demo的文件夹 cd demo 进入demo 这一系列命令的组合就是脚本,当我们运行 ...

  2. 加入docker管理员_如何使系统管理员和开发人员同意Docker

    加入docker管理员 在短短两年内,将Docker用作应用程序容器管理系统已成为开发人员和系统工程师的标准做法. 有人喜欢说,自Ope​​nSSH以来,还没有看到这样的技术进步. Docker现在是 ...

  3. jstack 脚本 自动日志_在 Linux 中使用 Bash 脚本删除早于 “X” 天的文件/文件夹...

    该脚本可防止来自 监控工具 的警报,因为我们会在填满磁盘空间之前删除旧的日志文件. -- Magesh Maruthamuthu(作者) 磁盘使用率 监控工具能够在达到给定阈值时提醒我们.但它们无法自 ...

  4. xshell脚本简单代码_十分钟学会写shell脚本

    大家好!我是handsomecui,下面我为大家讲解一下shell脚本的写法,讲的不好的地方,欢迎大家留言拍砖. 1.在linux下会写shell脚本是非常重要的,下面我参照例子给大家展示几个脚本,顺 ...

  5. shell脚本自动回车_干货分享:Linux shell脚本分享!!快收藏起来吧

    Linux shell 脚本分享 Shell 是一个命令解释器,处于内核和用户之间,负责把用户的指令传递给内核并且把执行结果回显给用户,Shell 它是一个用 C 语言编写的程序,它是用户使用 Lin ...

  6. python跳一跳脚本详解_微信跳一跳游戏 python脚本辅助得高分

    微信小程序一时间火爆朋友圈,关键是还有排行榜!游戏操作简单,可直接根据电脑识别,用python写出自动跳辅助脚本,本想动手写下,索性网上有大神写了现成脚本,修改了一小部分参数,就可以稳定使用了霸榜没有 ...

  7. crt脚本 js 在_crt脚本 js 在_使用SecureCRT自带的脚本录制功能。

    建立登录会话并登录服务器 开始录制脚本 Script -> Start Recording Script 输入登录的命令 LANG=en_US.UTF-8 su - username Passw ...

  8. python英雄联盟脚本是什么_用python写王者荣耀脚本!

    00. 前言 今天这篇文章我想很多人都有想过,比如说脚本自动走位,对于王者荣耀和英雄联盟都是怪物级别的存在.但是还是觉得有些不够熟练,自己试过几次才成功. 01. 目录文件分类 前言 有时候,想要对一 ...

  9. python写手机脚本脱离电脑_在手机里编写python脚本控制手机

    今天我有一个大胆的想法,想在手机里面编写python脚本自动化控制手机.既然有了这么大胆而想法,而且我还能实现,那么就有了我现在这篇文章. 如何在手机里面编程 首先先介绍一款能直接在手机里面运行代码的 ...

最新文章

  1. http://nlp.stanford.edu:8080/parser/index.jsp
  2. 浅析C#基于TCP协议的SCOKET通信
  3. Jbox帮助文档,默认的属性含义
  4. [渝粤教育] 西南科技大学 国际贸易理论与实务 在线考试复习资料2021版(2)
  5. 深拷贝与浅拷贝Object.assign()
  6. 前端学习(1339):mongodb更新数据文档
  7. linux动态库与静态库混合连接
  8. 大数据学习(2-2)- 使用docker安装配置Hadoop环境
  9. 失败创业者的告白:初创团队应有一位绝对领导者
  10. C程序设计语言上机13,《高级语言程序设计》北大上机试题(十三)
  11. 16. Use the same form in correspondng uses of new and delete
  12. spring 常用注解以分类
  13. Qt实战案例(13)——Qt的界面外观详细介绍
  14. TwinCAT 3 file记录日志txt文件程序
  15. 使用Arduino和HMC5883L磁力计的数字罗盘
  16. 如何去除 Win11 Dev 通道版本的右下角水印
  17. Ubuntu17.04系统安装必备软件与存在的问题
  18. 善用并行,让构建倍速进行
  19. 头文件和库文件区别,动态库和静态库的区别,动静态库的生成
  20. 程序员未来的出路究竟在哪里?一位老码农的心声

热门文章

  1. 解决方案:SpringBoot分布式项目跨域
  2. Spring Cloud核心组件原理分析
  3. cmd窗口pip显示不是内部或外部命令,也不是可运行的程序或批处理文件
  4. 基于docker使用jenkins集成sonar
  5. springboot整合ehcache+redis实现双缓存
  6. 浅析vue2.0的diff算法
  7. 用sed和awk实现将文本中的上下两行合并为一行(转载)
  8. Linux学习体会。
  9. 安装Windows Service总是发生异常!
  10. 【常见Web应用安全问题】---1、Cross Site Scripting