《shell编程实战》第2章shell脚本入门(下)

1、sh和./的区别
[[email protected] ~]# cat test.sh
echo I am thzzc1994
[[email protected] ~]# sh test.sh
I am thzzc1994
[[email protected] ~]# bash test.sh
I am thzzc1994
[[email protected] ~]# ./test.sh
-bash: ./test.sh: 权限不够
想要让./可以执行,需要在用户位加权限x(可执行exec的意思),
在我的环境下执行chmod u+x test.sh等价于chmod 744 test.sh:
[[email protected] ~]# ll test.sh
-rw-r--r-- 1 root root 20 4月 22 11:45 test.sh
[[email protected] ~]# chmod u+x test.sh(chmod 744 test.sh)
[[email protected] ~]# ll test.sh
-rwxr--r-- 1 root root 20 4月 22 11:45 test.sh
[[email protected] ~]# ./test.sh
I am thzzc1994
提示:由于./方法每次都需要给定执行权限,但容易被忘记,且多了一些步骤,增加了复杂性,所以一般都是用sh执行。
2、sh和source的区别
[[email protected] ~]# echo ‘userdir=pwd‘>test.sh
[[email protected] ~]# cat test.sh
userdir=pwd
[[email protected] ~]# sh test.sh
[[email protected] ~]# echo $userdir

在当前shell查看userdir的值,发现值是空的。现在以同样的步骤改用source来执行,再来看看userdir变量的值:
[[email protected] ~]# source test.sh
[[email protected] ~]# echo $userdir
/root
结论:通过source或.加载执行过的的脚本,由于是在当前shell中执行脚本,因此在脚本结束之后,脚本中的变量(包括函数)值在当前shell中依然存在,而sh和bash执行脚本都会启动新的子shell执行,执行完后回到父shell,变量和函数值无法保留。
平时在进行shell脚本开发时,如果脚本中有引用或执行其他脚本的内容或配置文件的需求时,最好用.或source先加载该脚本或配置文件,再加载脚本的下文。
趁热打铁:这是某互联网公司linux运维职位笔试题。请问echo $user的返回结果为()
[[email protected] ~]# cat test.sh
user=whoami
[[email protected] ~]# sh test.sh
[[email protected] ~]# echo $user
(A)当前用户
(B)thzzc1994
(C)空值
前面已经讲过了,sh的变量值,父shell是得不到的。所以这题可以看成只有一句话,那就是
[[email protected] ~]# echo $user
结果当然是空值了。
结论:(1)子shell脚本会直接继承父shell的变量、函数等,就好像儿子随父亲姓,基因继承父亲的,反之则不可以。
(2)如果希望父shell继承子shell,就先用source或.加载子shell脚本,后面父shell就能用子shell的变量和函数值了。
3、介绍一个简单编辑脚本命令cat>,能大大方便开发
cat>test.sh,输入内容后按回车,再按Ctrl+d组合键结束编辑。
[[email protected] ~]# cat>test.sh
echo I am thzzc1994 [Enter][Ctrl+d]
[[email protected] ~]# sh test.sh
I am thzzc1994

原文地址:http://blog.51cto.com/10249069/2111047

时间: 2024-10-13 13:37:37

《shell编程实战》第2章shell脚本入门(下)的相关文章

《跟老男孩学Linux运维之shell编程实战》-第一章 shell脚本初步入门

本文是在学习<跟老男孩学Linux运维之shell编程实战>这本书时记录的知识点.看了这本书,我受益匪浅,当然这仅是我个人观点.下面我们言归正传,开始了解一下shell脚本吧! shell本身是一个命令解释器,它的作用是解释执行用户输入的命令及程序等. shell脚本语言的种类:sh.ksh.bash.csh.tcsh,Linux中主流的shell是bash,所以本文及后续shell脚本以bash为主. 那我们如何查看Linux系统中默认的shell? [[email protected] ~

《跟老男孩学Linux运维之shell编程实战》-第二章 shell变量的核心基础

这篇文章主要讲解 shell变量的核心基础. 1.变量是什么? 变量是什么?可能有好多人不明白,简单地说,变量就是用一个固定的字符串(也可能是字符.数字等的组合)代替更多.更复杂的内容,该内容里可能还会包含变量.路径.字符串等其他的内容. 变量的赋值方式为:先写变量名称,紧接着是"="这个字符,最后是值,中间无任何空格(变量的内容一般要加双引号,以防止出错,特别是当值里的内容之间有空格时). 如何打印变量?通过echo命令加上$变量名 打印变量的值: 例如:定义变量和打印变量: [[e

《跟老男孩学Linux运维之shell编程实战》-第五章 shell脚本的条件测试

本文的知识点是关于shell脚本的条件测试的相关内容. 通常在shell脚本中我们需要做各式各样的条件判断,比如,测试一个文件是否存在.是否为文件或目录.是否 具有执行权限等等,所以在shell脚本中,条件判断还是至关重要的.接下来我们进入正题:shell脚本的条件测试. 1.在bash编程中,条件测试常用的语法形式如下表: 提示: 语法1中的test命令和语法2中的[]是等价的.语法3中的[[]]双中括号为扩展的test命令. 语法4中的(())常用于计算. 在双中括号[[]]中可以使用通配符

《跟老男孩学Linux运维之shell编程实战》-第四章 变量的数值计算

本文讲解shell编程中变量的数值计算. 1.常见的算术运算符: 提示: 此处对于我自己来说++.--比较难理解,之前一看到脚本中有这些符号,就看不懂了,所以在此举例说明一下: [[email protected] ~]# a=10                  ==>定义变量a[[email protected] ~]# echo $((a++)) ==>如果a在运算符++或--的前面,那么输出整个表达式时,会输出a的值, 此前定义的变量a为10,所以此处的值为10.10[[email 

《跟老男孩学Linux运维之shell编程实战》-第三章 shell变量知识进阶

本文讲解shell变量知识进阶. 以下为知识点的总结,关于练习,本文不不涉及,还需要各位小伙伴自己练习! 1.shell中的特殊位置参数变量,请见下表: 在企业场景下,"$?"的用法: (1)判断命令.脚本或函数等程序是否执行成功: (2)若在脚本中调用执行"exit 数字",则会返回这个数字给"$?"变量: (3)如果是在函数里,则通过"return  数字",把这个数字以函数返回值的形式传给"$?".

老男孩新书Shell编程实战预定开始了-包邮包答疑

老男孩新书Shell编程实战预定开始了(扫图中二维码购买包邮定期包答疑),亲爱的伙伴们,让你们久等了.电脑用户猛戳 电脑购买链接 注意:包邮包3个月(2017春节后起算)Q群书籍内容答疑,等于白送书,还倒搭答疑服务. 如果觉得给力,请帮忙朋友圈.QQ群.空间转载! 活动优惠仅限本次活动,从其他渠道购买不享受此次的服务承诺. 定价 89元 基本信息 作者: 老男孩 丛书名: Linux/Unix技术丛书 出版社: 机械工业出版社 ISBN:9787111556077 上架时间:2017-1-6 出

Linux Shell 编程实战技巧

目前,越来越多的企业应用会部署在 Linux 系统上的,而 Linux Shell 脚本可以极大地帮助我们完成这些应用的运维任务.这使得 Linux Shell 开发技能成为开发人员的一项重要的.有竞争力的技能.本文就笔者的实际开发经验,以 Korn Shell 为例分享了脚本开发中的常见问题及相关技巧. 避免定时任务脚本的常见问题 很多脚本在实际使用的时候往往是以定时任务的方式运行,而非手工运行.但是实现同样功能的脚本在这两种运行方式下可能遇到的问题不尽相同. 以定时任务方式运行的脚本往往会遇

centos shell编程6一些工作中实践脚本 第四十节课

centos   shell编程6一些工作中实践脚本    第四十节课 上半节课 下半节课 f

老男孩的2017年Shell编程实战新书封皮设计你做主!

各位小伙伴,大家好,老男孩的第二本新书<Shell编程实战>就要和大家见面了(预计2017年1月初)! 请大家参与选择封皮的颜色,大声的告诉老男孩,时间截止到12月22日晚22:00,你的选择将直接决定本书的封皮设计,谢谢大家! 请评论出书喜欢1.蓝色还是2.橙色!也可以加理由! 还可加群关注新书出版具体时间动向,运维Q群 384467551 架构师Q群390642196 1.蓝色 2.橙色 如果有其他建议可以评论.

Shell 脚本入门--下

Shell 脚本入门--下 本为大家介绍,本篇介绍内容有:逻辑运算符(& .| .!.^).测试命令.脚本的执行过程 1.逻辑运算符 (1)&与和&&短路与 True .false 1       0 与: 1 & 1 = 1 1 & 0 = 0 0 & 1 = 0 0 & 0 = 0 对于&来说,如果左侧条件为false,也会计算右侧条件的值.特点只要有一个false就认为是false 短路与: false && =