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 结构的更多相关文章

  1. 启动bash shell的三种方式下,检查的启动文件

    启动bash shell的三种方式 1.登录时当做默认登录shell 2.作为非登录shell的交互式shell 3.作为运行脚本的非交互shell 一.登录shell 登录Linux系统时,bash ...

  2. bash shell命令与监测的那点事(三)

    bash shell命令与监测的那点事之df与du 前两篇介绍了bash shell的进程监控指令,但是有时候你需要知道在某个设备上还有多少磁盘空间.首先介绍df命令: df命令 df命令就是用来轻松 ...

  3. 第四章:更多的bash shell命令

    第四章:更多的bash shell命令 监测程序 ps (其他ps内容见#1 ) Unix风格的ps命令参数 参数 描述 -A 显示所有进程 -N 显示与指定参数不符的所有进程 -a 显示除控制进程( ...

  4. bash shell学习-实践 (自己实现一些小工具)

    The poor starve while the rich feast. "穷人饥肠辘辘,富人大吃大喝" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版)  Linux S ...

  5. Linux 常用命令解析和Bash Shell使用示例脚本演示

     摘要 Linux命令是基于文本格式输入输出的一种程序,依照Unix哲学中强调的程序功能简单,输入宽松,输出严谨,各种程序组合能够具有更强大的功能,而具有这样的灵活性的主要原因是Linux规定程序 ...

  6. 《Linux命令行与shell脚本编程大全》- 读书笔记2 - 更多的bash shell命令

    更多的bash shell命令 想检测进程,需要熟悉ps命令的用法.ps命令好比工具中的瑞士军刀,它能输出运行在系统上的所有程序的许多信息.默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户 ...

  7. linux文件管理之bash shell

    BASH Shell 对文件进行管理 ========================================================创建.复制.删除.移动.查看.编辑.压缩.查找 内 ...

  8. [转帖][Bash Shell] Shell学习笔记

    [Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html  阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...

  9. bash shell学习笔记(一)—— 常用命令

    一.基本的bash shell命令 1.默认bash shell 提示符是美元符号($); 2.bash手册 使用man命令来访问存储在Linux系统上的手册页面,如: bogon:~ Mac$ ma ...

随机推荐

  1. Git的配置与基本操作

    Git是一个版本控制软件,它可以让我们能够拍摄处于可行状态的项目的快照,修改项目(如实现新功能)后,如果项目不能正常运行,可以恢复到前一个可行状态. 通过使用版本控制,我们可以无忧无虑的改进项目,不用 ...

  2. 【leetcode】1028. Recover a Tree From Preorder Traversal

    题目如下: We run a preorder depth first search on the root of a binary tree. At each node in this traver ...

  3. python内建模块——collections模块

    在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict.namedtuple和Ord ...

  4. Android逆向之旅---基于对so中的section加密技术实现so加固

    一.前言 好长时间没有更新文章了,主要还是工作上的事,连续加班一个月,没有时间研究了,只有周末有时间,来看一下,不过我还是延续之前的文章,继续我们的逆向之旅,今天我们要来看一下如何通过对so加密,在介 ...

  5. 【Java】JSONObject学习

    介绍 JSONObject只是一种数据结构,可以理解为JSON格式的数据结构(key-value 结构),可以使用put方法给json对象添加元素.JSONObject可以很方便的转换成字符串,也可以 ...

  6. [CSP-S模拟测试]:天才绅士少女助手克里斯蒂娜(数学+树状数组)

    题目描述 红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响. 选取显像管的任意一个平面,一开始平面内有个$n$电子,初始速度分别为$v_i$,定义飘升系数为$$\sum \li ...

  7. ubuntu 配置pptp

    PPTP是点对点隧道协议,用于在公网上建立两个节点之间的专用用网络.普通的用户一般是通过拨号的方式,接入ISP提供的网络,由于国内的上网环境,是访问不了google的,所以必须首先要有一台可以上goo ...

  8. AUC

    https://www.cnblogs.com/earendil/p/9400275.html

  9. Failed to load resource: the server responsed with a status of 400 (Bad Request)

    浏览器报错:Failed to load resource: the server responsed with a status of 400 (Bad Request) ajax请求失败,一般情况 ...

  10. PHP 数组下标自动转换为整型的坑

    在做项目时,上线后遇到一个 BUG,有一个数组存储了下标从 '01'到'18' 总共18组数据.上线前测试了前几组数据,没问题.上线后,在用户选择'15'时报错,找不到这个数据.查了一下代码,数据是没 ...