[原创]后台运行的shell脚本对文件锁的影响

假设shell脚本A中的一段代码设置有文件锁,在此文件锁的后面(外部)以后台运行的方式调用了脚本B(此脚本中也有文件锁,但是与脚本A的锁文件不是同一个文件),并且脚本B执行时间相当之长,那么,在后台运行的脚本B在结束之后,是否会导致脚本A无法启动第二个进程呢?

下面就来做一个简单的试验,以确定上面的问题。

脚本A(parent.sh)内容如下:

#!/bin/sh
SHELL_DIR="/root/"
LOCKFILE_1=$SHELL_DIR".lock1"
{
    echo "Go into lock1."
    if ! flock -n 4; then
        echo "*** Shell is running, quit."
        exit 1
    fi
} 4<>$LOCKFILE_1

$SHELL_DIR"child.sh" &      # run shell B on background 

阅读更多

shell脚本因文件编码问题不能正确执行的问题

遇到一例因shell文件的编码问题导致执行后不能得到正确结果的问题。一般来说脚本中不会带有中文,不过有时候例外,例如你要查找一个文本中的字符串,cat test.txt | grep "汽车"  这样的命令,如果文件编码不对,就可能得不到正确结果。

阅读更多

用shell将时间字符串与时间戳互转

在shell中,字符串转换为时间戳可以这样做:

date -d "2010-10-18 00:00:00" +%s

不需要指定时、分、秒的话,直接写日期就可以了:

date -d "2010-10-18" +%s

输出形如:

1287331200

其中,-d参数表示显示指定的字符串所表示的时间,+%s表示输出时间戳。

阅读更多

[原创] 用shell判断一个字符串是不是全为数字 & 截取字符串的若干示例

文章来源:http://www.codelast.com/

 

(1)判断一个字符串是不是全为数字

#!/bin/sh

# 该变量就是要判断的变量
VAR="1234908"

RET=`expr match $VAR "[0-9]*$"`
if [ ${RET} -gt 0 ]; then
	echo "It is a Number!"
else
	echo "Not a Number!"
fi

文章来源:http://www.codelast.com/

另外要注意:用这种方式来判断负数的时候,也认为不是全为数字的,因为负数中带了一个负号,就不是数字

阅读更多