转摘自:http://hi.baidu.com/homappy/item/90e416525d2faf958c12edb7

Shell 脚本执行有三种方法

  bash 脚本名

  sh 脚本名

  chmod +x 脚本名

  使用下面语句测试

  #a.sh(扩展名可不要)

  cd /

  pwd

  echo "complete"

  然而具体执行时候,发现过程中改变过路径,然而最终结果是并没有改变路径。

输出结果:

[fedora@localhost ~]$ bash a.sh

  /

  complete

  [fedora@localhost ~]$

  原因分析:

执行脚本时候,只是在当前的shell下开了一个子进程,切换目录的操作只对该进程中相关后续指令有效,但改变不了父进程的目录

  解决方法:

  法一:

  用 source a.sh就行了。

  法二:

  [fedora@localhost ~]$ cd ~

  [fedora@localhost ~]$ chmod u+x a.sh

  [fedora@localhost ~]$ . ./a.sh

  /

  complete

  [fedora@localhost /]$

  对于 $ . ./a.sh

  第一个点是bash的内部命令,表示在当前shell中运行

  后面的“./a.sh”是命令的参数,即要执行的脚本

  注:两点之间要有空格。

补充:

source命令用法:

source FileName

作用:在当前bash环境下读取并执行FileName中的命令

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

如:source .bash_rc 与 . .bash_rc 是等效的。

                

source命令(从 C Shell 而来)是bash shell的内置命令。点命令,就是个点符号,(从Bourne Shell而来)是source的另一名称。同样的,当前脚本中配置的变量也将作为脚本的环境,source(或点)命令通常用于重新执行刚修改的初始化文档,如 .bash_profile 和 .profile 等等。

例如,假如在登录后对.bash_profile 中的 EDITER 和 TERM 变量做了修改,则能够用source命令重新执行 .bash_profile 中的命令而不用注销并重新登录。

像.bash_profile 或其它类似的Shell脚本这样,文件无需可执行权限即可用source或点命令执行。

比如您在一个脚本里export $KKK=111 ,假如您用./a.sh执行该脚本,执行完毕后,您运行 echo $KKK,发现没有值,假如您用source来执行 ,然后再echo,就会发现KKK=111。

因为调用./a.sh来执行shell是在一个子shell里运行的,所以执行后,结构并没有反应到父shell里,但是source不同他就是在本shell中执行的,所以能够看到结果。



source命令的一个妙用



在编译核心时,常常要反复输入一长串命令,如

make mrproper

make menuconfig

make dep

make clean

make bzImage

.......

这些命令既长,又繁琐。而且有时候容易输错,浪费你的时间和精力。如果把这些命令做成一个文件,让它自动按顺序执行,对于需要多次反复编译核心的用户来说,会很方便。用source命令可以办到这一点。它的作用就是把一个文件的内容当成是shell来执行。先在/usr/src/linux-2.4.20目录下建立一个文件,取名为make_command:

在其中输入如下内容:

make mrproper &&

make menuconfig &&

make dep &&

make clean &&

make bzImage &&

make modules &&

make modules_install &&

cp arch/i386/boot/bzImge /boot/vmlinuz_new &&

cp System.map /boot &&

vi /etc/lilo.conf &&

lilo -v

文件建立好之后,以后每次编译核心,只需要在/usr/src/linux-2.4.20下输入

source make_command

就行了。这个文件也完全可以做成脚本,只需稍加改动即可。这里主要是让大家理解source的用法。如果你用的不是lilo来引导系统,可以把最后两句话去掉。配置你自己的引导程序来引导新内核。



shell编程中的命令有时和C语言是一样的。&&表示与,||表示或。把两个命令用&&联接起来,如make mrproper && make menuconfig,表示要第一个命令执行成功才能执行第二个命令。对执行顺序有要求的命令能保证一旦有错误发生,下面的命令不会盲目地继续执行

最新文章

  1. Core Java 总结(字符和字符串类问题)
  2. Permutation test: p, CI, CI of P 置换检验相关统计量的计算
  3. [.NET领域驱动设计实战系列]专题十一:.NET 领域驱动设计实战系列总结
  4. python函数和常用模块(三),Day5
  5. JAVA bio nio aio
  6. 使用属性动画简单实现view飞入效果
  7. 绕过 <?PHP exit('Access Denied'); ?> 限制
  8. hadoop+hbase
  9. httpServer V1
  10. haproxy部署及配置
  11. 源代码解读Cas实现单点登出(single sign out)功能实现原理--转
  12. HOJ1008
  13. 设计一个程序能够将某一个目录下面的所有文件名打印出来---File类的使用
  14. 【USACO15FEB】审查(黄金)Censoring (Gold)
  15. Linux Mysql数据库安全配置
  16. 日志学习系列(四)——NLog实例
  17. L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)
  18. Spark DataFrame的groupBy vs groupByKey
  19. Linux上iptables防火墙的基本应用教程
  20. centos7.2 mysql5.5编译安装

热门文章

  1. Zookeeper系列(二) Zookeeper配置说明
  2. Android开发——Android手机屏幕适配方案总结
  3. Apache 配置说明
  4. 如何从海量IP中提取访问最多的10个IP
  5. Pc移植到Mac的技术细节
  6. android中的AIDL学习笔记
  7. Android OpenStreetMap(OSM) 使用 osmbonuspack 进行导航
  8. C++学习011-常用内存分配及释放函数
  9. tp5 项目实战 初级 文字步骤
  10. Spark性能超过Hadoop百倍