2021-08-29-第一个bash脚本遇到的问题以及解决方案

写第一个bash脚本遇到的问题以及解决方案

1 变量的定义和使用
变量的定义很简单,不需要类型声明。但是注意

  • 给变量赋值的时候 等号两端 不应该有空格。否则出错。
  • 变量的赋值如果使用另外变量的话,应该使用$()将其括起来
  • 变量的赋值还可以是 一个命令的输出,前提也是必须用$()括起来。来说明不是一个简单的字符串

变量的使用也很简单,需要注意

  • 必须加$,可以使用${},时候后者可以使用一些其他的功能,包括我将会讲到的字符串的截取

2 变量为字符串的时候,怎样进行截取

  • 使用${variable:A:B}的格式,来截取使用下标来固定的字串
    1. A代表开始位置的下表。最好不要省略。也可以是 0-n 的格式,表示从后面数多少个
    2. B代表子字符串长度。省略的话,连 : 也不要写,表示到最后。
  • 使用${varibale:#},${varibale:##}, ${varibale:%}, ${varibale:%%}来按照通配符进行匹配。详情自己查。
  • 使用cut来截取。适合那种 格式严格,有多行 的字符串。比如/etc/passwd的内容
  • 另外:
    1. 使用${#varibale}可以查看变量的长度
    2. 字符串的拼接直接重新赋值,拼接内容跟在变量后面即可。不需要加+运算符

3 字符串的处理替换等操作

使用sed命令进行处理,sed意思为stream editor ,可以对字符串流进行编辑操作。,格式为 sed command 文件名 。以行为单位,讲一行放在一个缓存区域,称之为pattern space。

  • command
    command 包括两个部分:
    1. 处理范围 使用数字表示行数。如1,3表示 1 行到 3 行。也可以使用正则表达式来匹配。
    2. 动作。替换,删除等等。当动作为替换的时候,可以使用s/正则表达式/替换内容/[g]的形式。使用替换也可以完成删除的功能。如果想要全局匹配,而不是 每一行只匹配第一个符合的,那么最后加上g字母。
      如果想要使用扩展的正则表达式,那么可以加上-E选项。
      -e的作用是后面跟command,因此,一个sed里面可以有多个command
      具体可以看 http://c.biancheng.net/linux/sed.html

4 重定向的问题

重定向不可以重定向到前一个命令的源文件中去。这样会导致前一个命令的源文件变成空的。如果有这个需求,可以配合使用tee命令。tee用于从标准输入中读取数据,写入文件中。使用如
sed -n '/img.*src=/ p' url.2 | tee url.2 > /dev/null
的命令可以更新url.2,并且 >/dev/null 可以不把数据输出到屏幕上。

5 字符串的拼接
如果要重新拼接一个变量,如果要拼接的内容在原始变量的前面,那么使用变量=内容$变量即可完成拼接。如果在原始变量后面,那么使用变量=$变量内容可能引发错误。因为变量的边界不明确。可以使用变量=${变量}内容
如果想要拼接一个命令的输出,那么直接街上反括号括起来command即可完成内容的嵌入。

6 预置参数的问题
$1,$2等表示参数值,如果没有对应的参数传进去的话,其也不为空。至于其是什么,我现在还不知道。不要使用[ -n $1 ]来进行判断。因为其总是为真

7 不要忘记程序结构后面的”小尾巴“,就是比如fi, done等。否则会造成文件结束异常的问题

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值