[原创]后台运行的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 "汽车"  这样的命令,如果文件编码不对,就可能得不到正确结果。

阅读更多

[原创]一些未归类的命令、操作方法或问题总结(2)

 

下面是一些未归类的命令及操作方法,专门记在此文中,以便将来查询。由于文章较长,请用Ctrl+F查询关键字来定位到你需要的内容。

 

(1)关于html的tagName

IHTMLElement::get_tagName方法可获取元素的tagName。tagName指的是元素的标签名。直观的效果测试,请看这个链接。

阅读更多

用shell获取内、外网IP地址 & 关于for循环的分隔符

(1)用shell获取:

内网IP地址

ifconfig -a | grep 'inet ' | cut -d ':' -f 2 |cut -d ' ' -f 1 | grep -v '^127'

阅读更多

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

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

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

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

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

输出形如:

1287331200

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

 

而时间戳转换为字符串可以这样做:

date -d @1287331200

输出形如:

Mon Oct 18 00:00:00 CST 2010

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

如果要转换成“2010-10-18 00:00:00”这种形式的日期时间字符串,则这样做:

date -d "1970-01-01 UTC 1287331200 seconds" "+%F %T"

输出形如:

2010-10-18 00:00:10

 

再多废话一句,如果只要输出日期,不要时间,则去掉 %T 就可以了:

date -d "1970-01-01 UTC 1287331200 seconds" +%F

输出形如:

2010-10-18

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

顺便再记一下取昨天日期的方法:

date -d "yesterday" +"%Y-%m-%d"

输出形如:
2010-08-22

[原创]使shell 命令脱离终端在后台运行 & 关于shell的一些入门知识

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


你是否遇到过这样的情况:从终端软件登录远程的Linux主机,将一堆很大的文件压缩为一个.tar.gz文件,连续压缩了半个小时还没有完成,这时,突然你断网了,你登录不上远程Linux主机了,那么前面的半个小时就会前功尽弃,你非常气愤……

在Linux下,如果你要执行的shell命令耗时特别长,并且:(1)你的网络不稳定,随时可能断网;或者(2)你在执行了shell命令之后必须要关闭终端软件(例如SecureCRT)。

那么你就需要以脱离终端的方式在后台运行这个shell命令。

方法如下:

阅读更多

Linux下shell脚本输出带颜色文字

 

文本终端的颜色可以使用“ANSI非常规字符序列”来生成。举例:

echo -e “\033[44;37;5m ME \033[0m COOL”

以上命令设置作用如下:背景色为蓝色,前景色为白色,字体闪烁,输出字符“ME”,然后重新设置屏幕到缺省设置,输出字符 “COOL”。“e”是命令 echo 的一个可选项,它用于激活特殊字符的解析器。“\033”引导非常规字符序列。“m”意味着设置属性然后结束非常规字符序列,这个例子里真正有效的字符是 “44;37;5” 和“0”。修改“44;37;5”可以生成不同颜色的组合,数值和编码的前后顺序没有关系。

阅读更多

[原创] 用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/

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

阅读更多

shell中数组的基本用法

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

「1」数组初始化
假设数组名为ARR,则初始化的一种方法是:

ARR=(2 4 6 8)

其中,括号里的各项使用空格来分隔。
初始化数组的另一种方法是,用其他命令输出的结果来填充到数组中,例如把 ls 命令输出的文件列表填充到数组中:

ARR=(`ls /opt/`)
for FILE in ${ARR[@]};
do
    echo $FILE;
done

「2」遍历数组方法为:

for NUM in ${ARR[*]}
do
	echo $NUM
done

文章来源:http://www.codelast.com/
其中,每一次循环过程中,数组里的当前元素均被保存到NUM变量中,使用即可。
如果要定义一个空的数组,直接unset即可:

unset ARR

「3」向数组中添加成员

ARR[1]="item_1"
ARR[2]="item_2"

上面的方法使用了指定数组索引的方式来向数组添加多个成员,但如果不想显式指定数组索引,则可以用下面的方法来添加:

ARR+=("item_1")
ARR+=("item_2")

「4」取出数组中的一个成员

[root@localhost ~]# echo ${ARR[2]}
item_2

「5」判断一个指定的字符串是否在该数组中:

if echo "${ARR[@]}" | grep -w "item_1" &>/dev/null; then
    echo "Found"
fi

其中,ARR是你的数组名,item_1是你要查找的字符串。

shell读取文件的 指定行/第N行 字符串

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

 

命令:

sed -n Np 文件名

其中,“N”必须替换成一个数字,例如,你要取文件1.txt的第7行,命令为: 

sed -n 7p 1.txt

输出结果即为指定行内容。

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