设为首页 收藏本站
查看: 1203|回复: 0

Linux Shell——bash shell 脚本简介

[复制链接]

尚未签到

发表于 2018-8-20 11:16:35 | 显示全部楼层 |阅读模式
bash shell 脚本简介
shell 运行环境
  如果你运行的是 Unix 或 Linux 系统,例如 Ubuntu,Red Hat,SUSE Linux,还有macOS,都是内置了 bash shell 的,所以你不需要额外配置所谓的开发环境。
  我的 shell 环境是 macOS Sierra 版本,如果你用的是其他 Linux 系统,后面的例子基本上都是可以运行的。
  首先,打开Terminal 命令行,先检查下你的系统的 shell 版本:
echo $BASH_VERSIONbash 命令层次结构
命令类型
  bash shell 内置了一个type命令会根据你输入的单词来显示此命令的类型,主要有以下五种类型:

  •   别名
  •   方法
  •   shell 内置命令
  •   关键字
  •   文件
  例如,我们经常使用的cd命令,我们来执行下面的命令来看下它属于哪种类型。
type cd  同时,为了查看更加详细的信息,可以使用
type -a cd  如果想查看的信息更加简洁和适合人们理解,可以使用如下命令和参数:
type -t lsPATH 命令
  Linux会检查配置在 PATH 环境中的指定路径的程序是否可以执行。通常情况下,当前目录是不会被查找,除非你把它配置到PATH 中,我们可以执行如下命令,把当前目录加到 PATH 环境中。
export PATH=$PATH:.  接下来,我们创建一个存放 shell 脚本的目录bin,可以用如下命令来执行:
$ test -d $HOME/bin || mkdir $HOME/bin  当然你可以在你的主目录下手动创建目录 bin。上面的意思是检查主目录是否有 bin 目录,没有则创建。
创建脚本
  没啥说的,学习每一种语言的第一个程序就是“Hello,World”,文件名叫 hello1.sh。
#! /bin/bashecho "Hello World"exit 0  解释一下:
  #!/bin/bash:通常情况下,脚本的默认第一行代码就是它。“#!”又被成为shebang。它用来告诉系统的解释器来执行脚本。除了 bash,我们还可以PHP,Perl等其他脚本。
  echo "Hello World":echo 是一个内置的命令,用来表示标准输出,类似于 Java 中的System.out.println()。
  exit 0:表示脚本结束退出,exit有一个整型参数,0表示正常退出,非0表示脚本执行中有错误。
执行脚本
  现在,我们来执行上面的脚本,你可以在命令行下,进入到脚本文件存在的目录,也可以是在任意目录下,但是,在执行的时候,文件的路径就应该为绝对路径:
bash $HOME/bin/hello1.sh  执行结果为,打印出“Hello world”。
  Tip
  在执行上面的命令中,可能会报错,提示权限不足或访问拒绝的错误。这是因为 hello1.sh 没有执行的权限。所以我们使用如下命令给文件加上对应的权限。
  chmod +x $HOME/bin/hello1.sh
脚本中的一些特殊参数
  在脚本中,有些表示特殊含义的参数,下面列出常见的几个:
参数标识符含义$0文件本身的名字$1表示位置的参数,第一个参数传递给脚本${10}在超过两位数的参数时,使用大括号限定起来$#参数的个数$*表示所有的参数  如下所示:
#! /bin/bashecho "file name $(basename $0)"echo "Hello $1"echo "Hello $*"echo "Args count: $#"exit 0  输出的结果为:
重视引号的正确使用
  到现在,我们使用了双引号来包围字符串用于 echo 命令的输出。
  在第一个 Hello1.sh中,使用单引号还是双引号,效果是一样的。下面的两行代码是等效的。
echo "Hello World"echo 'Hello World'  但是,在包含有变量的引用时,单引号和双引号的效果是不一样的。
echo "Hello $1" // 打印传递的值,例如 Tim。echo 'Hello $1' // 把$1原样打印出来  所以,在有变量的字符串里,推荐使用双引号。这时,$1就会被变量的值所替代,而不是作为字符串显示出来。
打印脚本名字
  前面提到过,特殊参数$0用来表示脚本的名字,这里的名字会带有完整的路径,如果我们只想要文件名的话,可以使用以下代码:
echo "You are using $(basename $0)"  这里$(….)语法的作用是我们先执行括号里面的命令,然后然后把结果赋给外面不知名的变量。
  $(….)语法还有一种相等的写法,注意,是键盘上数字1左边的按键,不是单引号。
echo "You are using `basename $0`"  个人不推荐这种写法,太容易混淆,不容易差错。
调试你的脚本
  如果想调试你的脚本,bash给我们提供了两个选项:-v 和-x。
  如果我们想逐行详细地查看脚本的内容,可以使用-v 选项。
#! /bin/bashecho "file name $(basename $0)"echo "Hello $1"echo "Hello $*"echo "Args count: $#"exit 0  更常用的是-x 选项,它们在执行时显示命令。当我们决定选择分支的时候,更加使用。
  可以看到,basename最先执行了,使用此选项不会看到代码的详情。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-554223-1-1.html 上篇帖子: 高级shell脚本(for、while、if、case) 下篇帖子: shell--8、Shell 流程控制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表