Shell中零碎问题整理

  1. 问题:在/etc/rc.local中运行一个脚本,脚本中的命令不执行。
    解决方案:脚本里面用到的命令要加绝对路径。
    参考资料:http://bbs.chinaunix.net/thread-4114921-1-1.html
  2. 问题:如何在当前脚本文件中调用另外一个脚本文件?
    解决方案:使用source或.
    脚本 first (测试示例1)

    #!/bin/bash
    echo 'your are in first file'

    方法一: 使用source
    脚本 second (测试示例2)

    #!/bin/bash
    echo 'your are in second file'
    source first

    方法二: 使用.
    脚本 second (测试示例3)

    #!/bin/bash
    echo 'your are in second file'
    . first

    参考资料:shell中调用另外的脚本文件的两种方法:http://forum.ubuntu.org.cn/viewtopic.php?f=88&t=1878

  3. shell如何获取当前执行脚本的路径
    #!/bin/bash
    # dirname $0,取得当前执行的脚本文件的父目录
    # cd `dirname $0`,进入这个目录(切换当前工作目录)
    # pwd,显示当前工作目录(cd执行后的)
    filepath=$(cd `dirname $0`; pwd)
    # 把脚本文件的绝对路径存在环境变量filepath中,可以输出$filepath查看完整路径
    echo $filepath
    

    在shell中:
    $0: 获取当前脚本的名称
    $#: 传递给脚本的参数个数
    $$: shell脚本的进程号
    $1, $2, $3...:脚本程序的参数
    参考资料:
    shell获取当前执行脚本的路径:http://blog.163.com/liumaohua890413@126/blog/static/357851642011910754693/
    [HowTo][Bash]如何取得当前正在执行的脚本的绝对路径?http://sexywp.com/bash-how-to-get-the-basepath-of-current-running-script.htm

  4. shell中$0,$?,$!等的特殊用法变量说明:
    $$
    Shell本身的PID(ProcessID)
    $!
    Shell最后运行的后台Process的PID
    $?
    最后运行的命令的结束代码(返回值)
    $-
    使用Set命令设定的Flag一览
    $*
    所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
    $@
    所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
    $#
    添加到Shell的参数个数
    $0
    Shell本身的文件名
    $1~$n
    添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
    我们先写一个简单的脚本,执行以后再解释各个变量的意义
    # touch variable
    # vi variable
    脚本内容如下:
    #!/bin/sh
    echo "number:$#"
    echo "scname:$0"
    echo "first :$1"
    echo "second:$2"
    echo "argume:$@"
    保存退出
    赋予脚本执行权限
    # chmod +x variable
    执行脚本
    # ./variable aa bb
    number:2
    scname:./variable
    first: aa
    second:bb
    argume:aa bb
    通过显示结果可以看到:
    $# 是传给脚本的参数个数
    $0 是脚本本身的名字
    $1是传递给该shell脚本的第一个参数
    $2是传递给该shell脚本的第二个参数
    $@ 是传给脚本的所有参数的列表
发表评论?

0 条评论。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据