阅读26
${0}返回的是
脚本
与当前路径的相对路径
所以
echo $(pwd)/${0}
就是脚本的绝对路径了
你执行下这个脚本就明白了
#!/bin/bash -x
echo ${0}
echo $(pwd)
echo $(pwd)/${0}
获取所有常规文件的文件名并打印出来的脚本listfilesh如下
#!/bin/bash
dir="/"
dir=$1$dir
for f in $dir
do
if [ -f $f ]
then
echo $f
fi
done
使用方法:
$ listfilesh PATH
原理:
PATH参数是路径,将路径后加上“/”,代表该目录下的所有文件和目录名,利用for循环比较每个文件是否是常规文件( -f比较运算符),若if表达式为真则打印
举例:
ls -l
total 36
-rwxrwxr-x 1 lipeng lipeng 48 Nov 29 20:08 aaash
drwxrwxr-x 2 lipeng lipeng 4096 May 4 2015 byteorder
drwxrwxr-x 8 lipeng lipeng 4096 May 3 2015 hello
-rwxrwxr-x 1 lipeng lipeng 122 Nov 29 20:16 listfilesh
-rw-rw-r-- 1 lipeng lipeng 177 Aug 1 03:10 maincpp
drwxrwxr-x 2 lipeng lipeng 4096 Sep 13 16:42 matrix
drwxrwxr-x 5 lipeng lipeng 4096 Apr 28 2015 modbus
drwxrwxr-x 2 lipeng lipeng 4096 Sep 13 10:10 shtest
drwxrwxr-x 2 lipeng lipeng 4096 Sep 16 18:21 test
$ /listfilesh
/aaash/listfilesh/maincpp
当我在执行shell脚本时,它会启动一个叫子shell的
进程
。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为“批处理进程”)。在某些情况下,你也许想要知道运行中的子shell的PID。这个PID信息可以在不同的情况下使用。比如,你可以使用shell脚本的PID在/tmp下创建一个唯一的临时文件。有时侯脚本需要检测所有运行的进程,它可以从进程列表中排除自身的子shell。在bash中,子shell进程的PID存储在一个特殊的变量‘$$'中。这个变量只读,你不可以在脚本中修改它。比如:
复制
代码
代码如下:
#!/bin/bash
echo "PID of this script: $$"
上面的脚本会得到下面的输出:
复制代码代码如下:
PID of this script: 6583
除了$$, bash shell还会导出其他的只读变量。比如,PPID存储子shell父进程的ID(也就是主shell)。UID存储了执行这个脚本的当前用户ID。比如:
复制代码代码如下:
#!/bin/bash
echo "PID of this script: $$"
echo "PPID of this script: $PPID"
echo "UID of this script: $UID"
输出是:
复制代码代码如下:
PID of this script: 6686
PPID of this script: 4656
UID of this script: 1000
上面输出中,PID每次执行都会变化。这个因为每次运行都会创建一个新的shell。另一方面,PPID每次都会一样只要你在同一个shell中运行。
对于所有bash内置变量列表,参考man页。

打赏