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模式  限制功能模式

最新文章

  1. 百度编辑器UEditor与UEditor 公式插件完整Demo
  2. oracle连接问题【转载】
  3. 用JS实现的类似QQ密码的输入特效
  4. mysql基础面试
  5. windows时间同步出错
  6. Haproxy+MYSQL 负载均衡 原创
  7. 重装sql server2008数据库安装不上原因
  8. C# WinForm实现控件拖动实例介绍
  9. MySQL Procedure(MySQL存储过程)[转]
  10. vim的命令集合
  11. Palindrome Subarrays
  12. Nginx 配置指令的执行顺序(八)
  13. 银河英雄传说[NOI2002]
  14. 对比Tornado和Twisted两种异步Python框架
  15. windows10系统关闭自动更新服务
  16. Vue小案例 之 商品管理------批量删除与商品数量的调整
  17. day03-变量
  18. 【vue】http-server开启本地服务
  19. JSP内置对象——application对象
  20. 3. DNN神经网络的正则化

热门文章

  1. re模块 时间模块
  2. 在flask服务里面执行adb 安装命令
  3. 未能加载文件或程序集 ICSharpCode.SharpZipLib
  4. Json转换 在java中的应用
  5. CKEDITOR Copying images from word
  6. 数据库的目录IDF打不开!附加失败
  7. create-react-app下的@修饰器正确的使用方式记录
  8. VMware Workstation 官方正式版及激活密钥
  9. css3爆炸轮播效果
  10. jdbc odbc JDBC-ODBC