三 Bash Shell 结构
Bash Shell 程序结构主要有 : 变量设定 内置命令 Shell 语法结构 函数 其他命令行程序构成
例子:
[root@localhost ~]# vim test.sh
#!/bin/bash
#
#用途:简单的shell程序
#
#
#
function show_name()
{
echo "今天是 $1 ,你 $2 大大,来自 $3"
} name=$
ip="192.168.1.16"
today=$(date +%F) #书中这里写的是 today='date +%F' 可是在执行的时候,总是会打印date +%F字样,百思不得其解,后来在群里问了一下这个脚本的写法,有位朋友告知这种写法,试了一下,成功出来想要的结果。
if [ $# != ]; then
echo "Usage: . /$0 [使用者名称]"
exit
fi show_name "$today" "$name" "$ip" sleep echo echo "Bye-Bye ;-)"
保存脚本。记住,要给脚本加上执行权限才能够执行
chmod +x test.sh
或者
chmod 755 test.sh 还记得什么意思么?不记得了,看上一章节
执行的时候
可以通过
sh test.sh bash test.sh /root/test.sh (绝对路径) 都可以执行该脚本。但这三种方法的特点是,都是在父shell中新开一个子shell环境,在这个子shell环境中来执行脚本程序。
. test.sh 或 source test.sh 这两个命令也可以执行该脚本。这两个命令的特点是在父shell中执行脚本程序
Bash Script 找错
1 通过bash脚本来排错
bash -v test.sh 提示出错行
bash -n test.sh 不执行,仅查看脚本代码
bask -x test.sh 追踪脚本的执行顺序
2 echo
在关键的地方用输出行来做解析。我常用的方式
3 shopt -s -o nounset 命令
书中写的是,bash内置命令 shopt,可以用来设定bash的功能选项。如果启用此选项,可以避免错打变量名称,造成程序执行错误的情况。
做了测试,也没了解个所以然出来。看来又要百度了
原来这个命令是写在脚本里边的,而不是在执行端操作的。
#!/bin/bash
shopt -s -o nounset 是放在这里的奥。。。 命令XXXX
Bash Script执行原理
login shell 登录档shell,这个不说了,在以前的博客中写过
/etc/passwd 和/etc/shadow之间的关系
还有一个群组的设置也是同这个一样的设计方式
如果login shell是 /bin/bash则就意味着能够登陆shell。否则就表示不能登录。
父shell和子shell问题。很有意思的一个脚本
#!/bin/bash
cd /var/log
touch ibeenhere.txt
这个脚本很简单,进入log目录,创建一个文件。有意思的是,第一句话,进入log目录。
如果你用子脚本执行的话,则当前shell是不会进入log目录的。但是确实会创建ibeenhere.txt文件奥。因为子shell进入了该目录,创建了该文件,然后跑了。
但是如果你用父shell执行这个脚本的话,你会发现,他确实进入到了lgo目录中。 什么你忘了怎么用子shell和父shell执行了?没关系,看上面
子shell可以不断进入新的子shell。直接用bash命令就可以进入子的shell层级。查看shell层级的命令 echo $SHLVL ,就可以知道当前是在第几层shell中。
如果要退出当前shell,可以用exit命令来执行。
同样也可以利用 ps axf指令来显示各进程之间的层级关系。
Bash Shell 的启动配置文件
Bash 有5种运行模式,分别是 互动模式 非互动模式 sh名称调用 POSIX模式 限制功能模式
三 Bash Shell 结构的更多相关文章
- 启动bash shell的三种方式下,检查的启动文件
启动bash shell的三种方式 1.登录时当做默认登录shell 2.作为非登录shell的交互式shell 3.作为运行脚本的非交互shell 一.登录shell 登录Linux系统时,bash ...
- bash shell命令与监测的那点事(三)
bash shell命令与监测的那点事之df与du 前两篇介绍了bash shell的进程监控指令,但是有时候你需要知道在某个设备上还有多少磁盘空间.首先介绍df命令: df命令 df命令就是用来轻松 ...
- 第四章:更多的bash shell命令
第四章:更多的bash shell命令 监测程序 ps (其他ps内容见#1 ) Unix风格的ps命令参数 参数 描述 -A 显示所有进程 -N 显示与指定参数不符的所有进程 -a 显示除控制进程( ...
- bash shell学习-实践 (自己实现一些小工具)
The poor starve while the rich feast. "穷人饥肠辘辘,富人大吃大喝" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版) Linux S ...
- Linux 常用命令解析和Bash Shell使用示例脚本演示
摘要 Linux命令是基于文本格式输入输出的一种程序,依照Unix哲学中强调的程序功能简单,输入宽松,输出严谨,各种程序组合能够具有更强大的功能,而具有这样的灵活性的主要原因是Linux规定程序 ...
- 《Linux命令行与shell脚本编程大全》- 读书笔记2 - 更多的bash shell命令
更多的bash shell命令 想检测进程,需要熟悉ps命令的用法.ps命令好比工具中的瑞士军刀,它能输出运行在系统上的所有程序的许多信息.默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户 ...
- linux文件管理之bash shell
BASH Shell 对文件进行管理 ========================================================创建.复制.删除.移动.查看.编辑.压缩.查找 内 ...
- [转帖][Bash Shell] Shell学习笔记
[Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html 阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...
- bash shell学习笔记(一)—— 常用命令
一.基本的bash shell命令 1.默认bash shell 提示符是美元符号($); 2.bash手册 使用man命令来访问存储在Linux系统上的手册页面,如: bogon:~ Mac$ ma ...
随机推荐
- CSS中浮动属性float及清除浮动
1.float属性 CSS 的 Float(浮动),会使元素向左或向右移动,由于浮动的元素会脱离文档流,所以它后面的元素会重新排列. 浮动元素之后的那些元素将会围绕它,而浮动元素之前的元素将不会受到影 ...
- TreeView拖动并存入数据库(可判断拖动)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 文件的上传与下载实现(react、express,create-react-app脚手架)
项目结构为前后端分离,中间布了一层node. 文件上传 要求:将文件信息等发送到后台. html代码 <input type="file" name="file&q ...
- vue里面的this指向
this.$http.jsonp(api).then(function(response){ console.log(response); console.log(this); this.list=r ...
- NuGet-Doc:承载自己的 NuGet 源
ylbtech-NuGet-Doc:承载自己的 NuGet 源 1.返回顶部 1. 可能希望将包仅发布到有限受众(例如,组织或工作组),而不是将其公开发布. 此外,一些公司可能希望限制其开发人员可以使 ...
- WPF属性之理解附加属性
附加属性,顾名思义,和被附加的控件没有依赖关系,只是强行给目标控件挂上一个“属性值”,以便于操作之.就好比,你在学校是学生,那么就要听老师的管教,在公司是下属,就要服从老板的命令一样. 我们常见的附加 ...
- 【python】 全角半角转换
以输入为GB18030编码字符串为例: #把全角字符串转半角 def tobanjiao(string): ustring = string.decode('GB18030') rstring = & ...
- 微信小程序这一块(续)
1.设置头部的信息 通过wx.setNavigationBarTitle 详情见:https://developers.weixin.qq.com/miniprogram/dev/api/ui/nav ...
- Macaca的Python的api整理
整理了下Macaca的API,做成思维脑图,方便阅览. WebDriver 安装 pip install wd git clone https://github.com/macacajs/wd.py. ...
- nodejs安装失败
原文链接:https://www.cnblogs.com/huiziblog666/p/6274494.html 出现error 2502 和error2503是因为win8的权限问题所导致的,具体说 ...