集团主站
欢迎来到成都达内官方网站!达内—美国上市公司 亿元级外企IT培训企业!
成都it培训哪家好
成都it培训哪家好
全国服务监督电话:15023458194  |   联系客服   |
当前位置:主页 > 培训课程 > Linux >

成都linux云计算:Linux运维的Bash指南,11条Bash实践经验!

发布者: 成都达内     浏览次数:     发布时间:2019-10-08 13:42:02

每个职业都有最常用的工具。对于许多系统管理员来说,shell可能是比较熟悉的。在大多数Linux和其他类Unix系统上,默认的shell是Bash。...

  每个职业都有最常用的工具。对于许多系统管理员来说,shell可能是比较熟悉的。在大多数Linux和其他类Unix系统上,默认的shell是Bash。

  Bash是一个相当古老的程序,它起源于20世纪80年代后期。但它建立在更多,更老的shell上,比如C shell(csh)。我们来看看一些基础知识。

  相信你在某些时候,曾无意中以root身份运行命令并导致某种问题?这里有一些非常简单的技巧可以防止你遇到这样的问题。

  成都linux云计算:Linux运维的Bash指南,11条Bash实践经验!

  使用别名

  首先,为mv和rm等命令设置别名,指向mv -I和rm -I。这将确保运行rm -f/boot至少要求你确认。在红帽企业版Linux中,如果你使用root帐户,则默认设置这些别名。

  如果你还要为普通用户帐户设置这些别名,只需将这两行放入主目录中名为.bashrc的文件中(这些也适用于sudo):

  alias mv=’mv -i’alias rm=’rm -i’

  你的根提示符

  你可以采取的另一项措施是防止意外发生,确保你在使用root帐户时知道。我通常这样做是为了让我的正常日常工作中使用的提示能够很好地突出根提示符。

  如果将以下内容放入root的主目录中的.bashrc文件中,你将看到一个黑色的红色根提示符,清楚地表明你(或其他任何人)应该谨慎操作。

  export PS1=”\[$(tput bold)$(tput setab 0)$(tput setaf 1)\]\u@\h:\w # \[$(tput sgr0)\]”

  实际上,你应该尽可能避免以root用户身份登录,而是通过sudo运行大多数系统管理命令,但这是另一回事。

  实施了一些小技巧来帮助防止使用root帐户的“无意的副作用”,让我们看看Bash可以给你你在日常工作中带来怎样的帮助?

  控制history文件你可能知道,当在Bash中按向上箭头键时,你可以查看并重复使用以前的所有命令。这是因为这些命令已保存到主目录中名为.bash_history的文件中。该历史文件附带了一组非常有用的设置和命令。

  首先,你可以通过键入历史记录来查看整个最近的命令历史记录,或者你可以通过键入历史记录,或将其限制为最近30个命令。你可以更好地控制Bash保存的内容以及保存方式。

  例如,如果将以下内容添加到.bashrc,则任何以空格开头的命令都不会保存到历史记录列表中:

  HISTCONTROL=ignorespace

  如果你需要用命令写入明文形式的密码。(是的,这太可怕了,但它仍然会发生。)

  如果你不希望在历史记录中显示经常执行的命令,请使用:

  HISTCONTROL=ignorespace:erasedups

  这样,每次使用命令时,都会从历史记录文件中删除之前发生的所有事件,并且只将最后一次调用保存到历史记录列表中。

  我特别喜欢的历史记录设置是HISTTIMEFORMAT设置。这将在历史记录文件中添加时间戳前的所有条目。例如,我使用:

  HISTTIMEFORMAT=”%F %T “

  当我输入五条历史记录时,我得到了很好的完整信息,如下所示:

  1009 2018-06-11 22:34:38 cat /etc/hosts1010 2018-06-11 22:34:40 echo $foo1011 2018-06-11 22:34:42 echo $bar1012 2018-06-11 22:34:44 ssh myhost1013 2018-06-11 22:34:55 vim .bashrc

  这使我更容易浏览我的命令历史记录,并找到我两天前用来建立到家中的SSH隧道。

  最好的Bash实践

  在编写Bash脚本时,我将用最好的11个用法列出来(我是这样认为的)。

  11.Bash脚本可能变得复杂,添加注释没那么复杂。因为如果你在周末之后回到工作中,不得不花时间搞清楚你上周五想要做什么的话,别忘了添加注释。

  10.用花括号括起所有变量名,比如

  成都linux云计算:Linux运维的Bash指南,11条Bash实践经验!

  {variable} _suffix成为可能,并提高整个脚本的一致性。

  9.评估表达式时不要使用反引号;请改用$()语法。可以使用:

  for file in $(ls); do

  反之:

  for file in `ls`; do

  前一个选项是可嵌套的,更易于阅读,并使一般的系统管理员感到满意。不要使用反引号。

  8.一致性很好。选择一种风格并在整个脚本中坚持下去。显然,我更喜欢人们在反引号中选择()语法。可以使用:¨G6G反之:¨G7G前一个选项是可嵌套的,更易于阅读,并使一般的系统管理员感到满意。不要使用反引号。8.一致性很好。选择一种风格并在整个脚本中坚持下去。显然,我更喜欢人们在反引号中选择()语法,并将其变量放在在花括号中。

  7.使用适当的shebang作为Bash脚本。因为我正在编写Bash脚本,只打算用Bash执行它们,所以我经常使用#!/ usr / bin / bash作为我的shebang。不要使用#!/ bin / sh或#!/ usr / bin / sh。你的脚本将执行,但它将以兼容模式运行。可能会产生许多意外的副作用。(当然,除非你想要兼容模式。)

  6.比较字符串时,在if语句中引用变量是个好主意,因为如果你的变量是空的,Bash会为这样的行抛出一个错误:

  if [ ${myvar} == “foo” ]; thenecho “bar”fi

  对于这样的行,将评估为false:

  if [ “${myvar}” == “foo” ]; thenecho “bar”fi

  此外,如果你不确定变量的内容(例如,在解析用户输入时),请引用变量以防止解释某些特殊字符,并确保该变量被视为单个词,即使它包含空格。

  5.更喜欢使用双等号(==),即使比较Bash中的字符串。这是一致性的问题,尽管,对于字符串比较,只有一个等号会起作用,我的考虑立即变为“单个等于是一个赋值运算符!”

  4.使用适当的退出代码。确保如果你的脚本无法执行某些操作,则会向用户显示已写入的失败消息(最好通过解决问题的方法)并发送非零退出代码:

  # we have failedecho “Process has failed to complete, you need to manually restart the whatchamacallit”exit 1

  这样可以更容易地以编程方式从另一个脚本调用脚本并验证其成功完成。

  3.使用Bash的内置机制为变量提供合理的默认值,或者如果未定义你希望定义的变量,则抛出错误:

  # this sets the value of $myvar to redhat, and prints ‘redhat’echo ${myvar:=redhat}# this throws an error reading ‘The variable myvar is undefined, dear reader’ if $myvar is undefined${myvar:?The variable myvar is undefined, dear reader}

  2.特别是如果你正在编写大型脚本,特别是如果你与其他脚本一起处理该大型脚本,请考虑在函数内部定义变量时使用local关键字。local关键字将创建一个局部变量,该变量只在该函数中可见。这限制了冲突变量的可能性。

  1.每个系统管理员有时必须这样做:在控制台上调试一些东西,可以是数据中心的真实服务器,也可以是虚拟化平台的虚拟服务器。如果你必须以这种方式调试脚本,你会感谢你自己记住这个:不要让你的脚本中的行太长!

  在许多系统上,控制台的默认宽度仍为80个字符。如果你需要在控制台上调试脚本并且该脚本有很长的行,那么将是一个悲剧。此外,具有较短行的脚本,默认值仍为80个字符,在普通编辑器中也更容易阅读和理解!

(责任编辑:范老师)
最新开班
  • 成都Java培训班
    免费试听名额发放中...
  • 成都C++培训班
    免费试听名额发放中...
  • 成都PHP培训班
    免费试听名额发放中...
  • 成都网络工程培训班
    免费试听名额发放中...
  • 成都Unity3D培训班
    免费试听名额发放中...
  • 成都大数据培训班
    免费试听名额发放中...
  • 成都uid培训班
    免费试听名额发放中...
  • 成都会计培训班
    免费试听名额发放中...
  • 成都Python培训班
    免费试听名额发放中...
  • 成都嵌入式培训班
    免费试听名额发放中...
  • 成都web培训班
    免费试听名额发放中...
  • 成都软件测试培训班
    免费试听名额发放中...
在线留言
提交

校区地址:成都市锦江区东大街紫东楼端35号明宇金融广场19楼1906室

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市高新区奥克斯广场蜀锦路209号一楼商铺

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都锦江区东大街芷泉街229号东方广场C座3楼303

联系电话:15023458194

公交路线:芷泉街(188路;115路;515路;236路;505路;501路;84路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市武侯区佳灵路3号红牌楼广场2号写字楼11楼1115号

联系电话:15023458194

公交路线:红牌楼东(11路;92路;100路;111路;139路;g28路;快速公交K1/K2) 地铁路线:红牌楼站(地铁3号线)

校区地址:成都市锦江区红星路二段70号四川日报大厦502-2

联系电话:15023458194

公交路线:市二医院站(6路;49路;102路;5路;37路;g92路;) 地铁路线:地铁市二医院(地铁3号线)

校区地址:成都市锦江区东大街芷泉段229号东方广场C座16层

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:四川省成都市武侯区高新科技孵化园9号园区E座7楼

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都市高新区奥克斯广场B座1708

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

了解达内动态
关注成都达内教育公众号

首页 | 关于达内 | 课程中心 | 专家师资 | 视频教程 | 学员空间 | 校企合作 | 新闻资讯 | 就业指导 | 网站地图

2016-2025 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56