专栏首页DBA随笔shell脚本中一些注意事项

shell脚本中一些注意事项

shell脚本中的一些注意事项

简介

shell脚本语言采用交互式的方法解释和执行用户输入的命令或者自动解释和执行预先设定好的一连串的指令,它里面定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构。今天看了看shell脚本语言的一些语法,感觉语法还是挺简单的,但是有一些需要注意的点,这里描述介绍一下。

Q:

source、sh、bash、./ 执行脚本的区别是什么

A:

1.1 source命令用法:

source FileName

作用:在当前 bash 环境下读取并执行 FileName 中的命令。该 filename 文件可以无 "执行权限"。

注:该命令通常用命令 . 来替代。

1.2 sh、bash的命令用法:

sh FileName或

bash FileName

作用:打开一个子 shell 来读取并执行 FileName 中命令。该 filename 文件可以无 "执行权限"。

注:运行一个shell脚本时会启动另一个命令解释器。

1.3 ./的命令用法:

./FileName

作用: 打开一个子 shell 来读取并执行 FileName 中命令,该 filename 文件需要 "执行权限"。执行时需要使用chmod +x file 加上执行权限,否则会提示无执行权限,注意执行脚本时候或者全目录,或者 ./file.sh ,如果不加的话,linux 默认会从PATH 里去找该 file.sh。

注:运行一个 shell 脚本时会启动另一个命令解释器。

Q:

单引号和双引号的区别

A:

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。

单引号字符串的限制:

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用

双引号的优点:

双引号里可以有变量

双引号里可以出现转义字符

实例说明:

输出的结果如下:

Q:

一个read命令

A:

read命令的一般语法形式是:

read [-options][variable...]

以下实例读取键盘输入的内容并将其赋值给shell变量:

其中包含了几个信息:

第一:read中的-p参数用来设置提示信息;

第二:在对r进行赋值的时候,使用了[]运算符,[]运算符执行基本的算数运算,其两边不需要空格。

Q:

参数传递

A:

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$nn 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推。

以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名:

输出的结果如下:

可以发现,单引号中的内容会直接原样输出来,如果想实现拼接的功能,需要我们使用单引号引起来。

我们可以看到,$1、$2的取值都是正确的,$10的值变成了100,很明显是不符合预期的,这是什么原因呢?需要注意的是当$n后面的数字n大于等于10的时候,我们需要使用${n}来表示,而不能直接写$n,本例子中的$10会被自动解析成${1}0,而不是我们想要的$10

本文分享自微信公众号 - DBA随笔(gh_acc2bbc0d447),作者:AsiaYe

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL5.5版本部署的一个问题

    目前公司部署MySQL是通过平台化操作的,周五的时候,平台暂时出了点儿问题,手上有个需求比较着急,就直接手动的部署了一下,由于好长时间没有部署环境了,...

    AsiaYe
  • MySQL学习过程阶段总结

    今天是公司夏游结束后的第一天,去了趟杭州回来,总体感觉很好,尝试了很多有意思的事情,觉得生活又重新变得有意思起来,总之,一切很好。

    AsiaYe
  • MySQL8.0的几个新特性

    今天翻看MySQL8.0的官方文档的时候,看到了MySQL8.0的几个新特性,简单测了下,跟MySQL5.7做了下对比,测试的结果如下:

    AsiaYe
  • 服务端测试之PostMan自动生成测试脚本

    作者本着在实践中学习,在学习中实践的思考模式,将理论知识与实际应用相结合,举出真实的案例,让读者学会举一反三。

    无涯WuYa
  • 安卓开发小效果--走马灯

    听着music睡
  • 技巧:Vimdiff 使用

    各种 IDE 大行其道的同时,传统的命令行工具以其短小精悍,随手可得的特点仍有很大的生存空间,这篇短文介绍了一个文本比较和合并的小工具:vimdiff。希望能对...

    菲宇
  • Android硬件加速相关问题总结

    从Android 3.0开始就支持硬件加速,充分利用GPU的特性,使得绘制View的时候更加平滑。例如在ListView(GridView)或者WebView中...

    阳仔
  • 做一名无线黑客,这些装备你必须有

    免责声明:本站提供安全工具、程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! 在电影里黑客都在大街上或者马路上直接用笔记本“嗒…嗒…嗒…”就把某个...

    FB客服
  • Python第二十课:面向对象和类

    大家可能听说过Python是一个面向对象(object)的编程语言,当然这个对象不是那个对象。更准确的来说,是因为Python里面有一种叫做类(class)的结...

    HuangWeiAI
  • 哦,这就是java的优雅停机?(实现及原理)

    其实优雅停机,就是在要关闭服务之前,不是立马全部关停,而是做好一些善后操作,比如:关闭线程、释放连接资源等。

    搜云库技术团队

扫码关注云+社区

领取腾讯云代金券