很长一段时间没有更新blog了,看到访问量的增加,对访问我blog的朋友真是觉得很不好意思。可是我最近都作了什么呢,我实在不知道有什么可以写写的,好象每天都很忙,但是却好象没有干出什么事情来,只是自己让自己在白忙活而已。很想改变这种日子,但是却提不起精神,还好最近借了N本LINUX的书,准备好好学学。
接触LINUX也有一段时间了,觉得命令好多,很难记住。有个高人指点我现学学shell编程可能会对LINUX的理解好很多。在这里也不想说什么有关语法亚,变量的问题,我直接给出一点具体的程序知道一下格式也就行了。 #!/bin/sh
#本脚本目的在于实现某个软件的启动,关闭,或者重新启动
#启动的软件由参数PGM决定
#列出错误提示
USAGE="Usage:$0 [ start | stop | restart ]"
#给出软件路径
PGM=/usr/sbin/sshd
#给出软件参数
PGM_OPTS=
#判断软件路径是否存在
if [ ! -x "$PGM" ] ; then
echo "Error:Not Executable:$PGM" l>&2
exit 1
fi
#判断操作系统类型
case "'uname -s'" in
Linux | Darwin | *BSD)PS="bin/ps auwxx"
;;
*)PS="/bin/ps -ef"
;;
esac
#判断命令
case "$1" in
#启动命令
start)
RUNNING=`$PS -aux | grep "$PGM" | grep -v grep |head `
if [ -n "$RUNNING" ] ; then
echo "Error:Already running :$PGM" 1>&2
exit 1
fi
"$PGM" $PGM_OPTS
echo "$PGM start"
;;
#关闭命令
stop)
RUNNING=`$PS | grep "$PGM" | grep -v grep |head `
if [ -z "$RUNNING" ] ; then
echo "Error:Not Exist:$PGM" 1>&2
exit 1
fi
/bin/ps -ef | grep "$PGM" | grep -v grep | /
awk '{print $2;}' | xargs kill 2 > /dev/null
echo "$PGM stop"
;;
#重启命令
restart)
RUNNING=`$PS | grep "$PGM" | grep -v grep |head `
if [ -z "$RUNNING" ] ; then
echo "Error:Not Exist:$PGM" 1>&2
exit 1
fi
/bin/ps -ef | grep "$PGM" | grep -v grep | /
awk '{print $2;}' | xargs kill 2 > /dev/null
"$PGM" $PGM_OPTS
echo "$PGM restart"
;;
#错误提示
*)
echo "$USAGE"
exit 1
;;
esac
exit 0
为了方便查找,我以后将shell程序都放在这个文件下面,并且把所有的有关shell的有用资料全放在评论中。
#!/bin/sh
#这个程序的主要目的是演示一下如何实现进度指示器(这个是按点来的)
function dots
{
count=0;
echo "please wait:"
while true
do
if [ $count -eq 40 ];then
printf "/n"
count=0
fi
sleep 0.5
printf "."
count=`expr $count + 1`
done
}
dots &
BG_PID=$!
sleep 5
echo -ne "/33[32m"
printf "/t/t/t/t/t/t"
printf "[ seccussfull ]"
printf "/n"
echo -ne "/33[0m"
kill $BG_PID
匿名网友 | 2005年 04月17日 20 : 26
第三个shell程序[回复]
这个和上面的功能是一样的,指示更是点画线实现function rotate
{
printf "Please Wait:"
printf "/t/t/t/t/t/t/t"
INTERVAL=0.5
TCOUNT="0"
while :
do
TCOUNT=`expr $TCOUNT + 1`
case $TCOUNT in
"1")printf "-"
printf "/b"
sleep $INTERVAL
;;
"2")printf "//"
printf "/b"
sleep $INTERVAL
;;
"3")printf "│/b"
sleep $INTERVAL
;;
"4")printf "//b"
sleep $INTERVAL
;;
*)TCOUNT="0"
;;
esac
done
}
rotate &
ROTATE_PID=$!
sleep 10;
echo -ne "/33[32m"
printf "[ seccessfull ]"
echo -ne "/33[0m"
printf "/n"
kill -9 $ROTATE_PID
匿名网友 | 2005年 04月17日 20 : 27
输出颜色控制[回复]
cNO="/033[00m" #还原
cFR="/033[01;31m" #红色前景
cFG="/033[01;32m" #绿色前景
cFY="/033[01;33m" #黄色前景
cFB="/033[01;34m" #兰色前景
cFM="/033[01;35m" #艳红前景
cFC="/033[01;36m" #浅兰前景
cFL="/033[01;37m" #亮白前景
cBR="/033[01;41m" #红色背景
cBG="/033[01;42m" #绿色背景
cBY="/033[01;43m" #黄色背景
cBB="/033[01;44m" #兰色背景
cBM="/033[01;45m" #艳红背景
cBC="/033[01;46m" #浅兰背景
cBL="/033[01;47m" #亮白背景
#用法举例:echo -e "$cFG 前景 $cBG 背景 $cNO 全部复原"
sagely | 2005年 04月21日 09 : 29
条件测试及expr的用法[回复]
流程控制
"if" 表达式 如果条件为真则执行then后面的部分:
if ....; then
....
elif ....; then
....
else
....
fi
大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等...
通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
执行man test可以查看所有测试表达式可以比较和判断的类型。
直接执行以下脚本:
#!/bin/sh
if [ "$SHELL" = "/bin/bash" ]; then
echo "your login shell is the bash (bourne again shell)"
else
echo "your login shell is not bash but $SHELL"
fi
变量$SHELL包含了登录shell的名称,我们和/bin/bash进行了比较。
-r filename 用户对文件filename有读权限?
-w filename 用户对文件filename有写权限?
-x filename 用户对文件filename有可执行权限?
-f filename 文件filename为普通文件?
-d filename 文件filename为目录?
-c filename 文件filename为字符设备文件?
-b filename 文件filename为块设备文件?
-s filename 文件filename大小不为零?
-t fnumb 与文件描述符fnumb(默认值为1)相关的设备是一个终端设备?
shell提供三种逻辑操作:
-a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。
测试字符串
s t r i n g _ o p e r a t o r可为:
= 两个字符串相等。
!= 两个字符串不等。
-z 空串。
-n 非空串。
测试数值
测试数值可以使用许多操作符,一般格式如下:
" n u m b e r " n u m e r i c _ o p e r a t o r " n u m b e r "
或者
[ " n u m b e r " n u m e r i c _ o p e r a t o r " n u m b e r " ]
n u m e r i c _ o p e r a t o r可为:
-eq 数值相等。
-ne 数值不相等。
-gt 第一个数大于第二个数。
-lt 第一个数小于第二个数。
-le 第一个数小于等于第二个数。
-ge 第一个数大于等于第二个数。
这里还是把数值看成字符串,如:====================================
number="130" 或 number=130
[ "$number" -eq "130" ]
e x p r命令一般用于整数值,但也可用于字符串。一般格式为:
expr argument operator argument
e x p r也是一个手工命令行计数器。
使用乘号时,必须用反斜线屏蔽其特定含义。因为s h e l l可能会误解显示星号的意义。
如:expr 3 /* 3
expr 3 / 3
e x p r命令用于记数:
number=1 --------number是字符串!!!!!
number=`expr $number + 1`===============反引号即替代命令,expr $number + 1是命令,不能放在等号右边
所有数字可以用引号括起来,也可不括起来,因为本来就不存在数字,只有字符串。!!!!!!!!!
但字符串和数字也有不同,当是数字字符串时,才能用n u m e r i c _ o p e r a t o r
typeset -i VAR8
VAR8=1
while ((VAR8<4))
do
((VAR8 = VAR8 +1))
echo $VAR8
done
匿名网友 | 2005年 04月21日 09 : 31