bash脚本学习小结

bash脚本

Shebang行

脚本的第一行需要指定解释器,(即当前脚本需要通过什么解释器执行),这一行以#!字符开头,这个字符成为Shebang,所以这一行也叫作Shebang行

#!之后就是脚本解释器的位置,bash脚本的解释器一般就是/bin/sh或者 /bin/bash。如果bash解释器不在/bin目录,那么脚本就无法执行,可以将解释器位置默认为 #! /use/bin/env bash

Shebang行不是必需的,但是缺少Shebang行时,执行脚本之前需要手动添加解释器的位置,将脚本传给解释器再执行


执行权限和路径

脚本执行的前提条件是,用户对于脚本需要有执行权限,给脚本赋予权限命令示例如下:

给所有用户执行权限 :chmod +x script.sh

给所有用户读取权限和执行权限 :chmod +rx script.sh chomd 755 script.sh

只给脚本拥有者读取权限和执行权限 :chmod u+rx script.sh

脚本的权限通常设置为755(拥有者有所有的权限,其他人有只读和执行权限),或者700(只有拥有者可以执行)。

除指定脚本权限外,脚本执行时还需要指定脚本的路径,可以将服务器的所有脚本统一放置,然后将目录添加到环境变量PATH中,这样的话执行时可以在任意目录下直接输入脚本名来运行脚本

mkdir ~/bin 在根目录下创建脚本文件夹

export PATH=$PATH:~/bin 将创建的脚本文件夹写入PATH环境变量

source ~/.bashrc 将新增的内容加入到~/.bashrc文件中,重新加载该文件配置(source .bashrc)即可生效


env命令

env命令总是只想/usr/bin/env文件,或者说该文件一直在目录/usr/bin中

#!/usr/bin/env name 可以让shell查找环境变量中指定name的命令的具体路径,例如:

/usr/bin/env bash

/usr/bin/env node

env的命令参数如下

不带环境变量启动 :-i ignore-environment

从环境变量中删除一个变量 :-u -unset=Name

显示帮助 :--help

输出版本信息 :--version

新建一个不带任何环境变量的shell env -i /bin/sh


注释

bash脚本中的注释 使用 #,可以放在行首,也可以放在行尾,一般可以放在脚本开头,解释说明当前脚本的作用


脚本参数

脚本执行调用时,可以在脚本之后以空格隔开的形式附带多个参数,在脚本内部使用固定参数接收格式来使用这些参数,例如,$1代表第一个参数,以此类推到$9,如果存在第十个参数可以使用${10}的方式

特殊变量如下:

$0 :脚本文件名

$1~$9 :对应脚本的第一个到第九个参数

$# :参数的总和

$@ :全部的参数,参数之间使用空格分隔

$* :全部的参数,参数之间使用变量$IFS值的第一个字符分隔,默认为空格,也可以自定义分隔符


shift命令

shift命令可以移除脚本的第一个参数,如果在shift命令后加上整数数字如 shift X,则代表指定移除脚本的X个参数


getopts命令

getopts命令用在脚本的内部,用于解析复杂的脚本命令行参数,通常与while一起使用,取出脚本中所有带有前置连词线 - 的参数

getopts optstring name

optstring参数时字符串,给出脚本所有的连词线参数

在包含多个配置项的情况下,如 -l -h -a但是仅有-a可以设置参数值时,可以写成 lha 但是getopts规定,带有参数值的参数配置项后需要有 :,最终也就是lha:

name 用来保存取到的配置项参数,例如 l h a


配置项参数终止符

-和--开头的参数,会被bash当做配置项解释,但是有些不是配置项,而是实体参数的一部分,例如 -f --file

这个情况下使用配置项参数终止符,告诉bash,在它后面的参数开头的-和--并不是配置项参数中支符,而是实体参数

-- -f -- --file

如果需要确保某个变量不会被当做配置项解释,就要在它前面放上参数终止符,但是如果变量并不是真实存在的路径,被当做实体参数执行后,会报错

如果在文件内容搜索时,要搜索的内容包含--,那么实际命令运行的时候搜索的内容需要放在双引号中


exit命令

用于终止当前脚本的执行,并且向shell返回一个退出值

exit命令后可以跟参数,该参数就是退出状态

exit与return的区别是return是函数的退出,而exit是整个脚本的退出,如果在函数中调用exit则退出函数且同时终止脚本的执行。


命令执行结果

命令执行结束后,会有一个返回值,0表示执行成功,非0表示执行失败,$?可以读取前一个命令执行的返回值


source命令

source命令用于执行一个脚本,通常用于重新加载一个配置文件,source命令最大的特点就是在当前shell执行脚本时可以直接执行,不需要新建一个字shell,且不需要export变量

source命令的另一个用途,是在脚本内部加载外部库。在脚本中加载外部库,可以直接在当前脚本中使用外部库的函数

source有一个简写形式,可以使用一个.来表示,例如: . .bashrc (重新加载配置)


别名 alias命令

使用alias可以对命令设置别名,unalias commandname可以删除设置的别名,查看所有设置的别名,在命令行直接输入alias即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值