shell编程学习

原创 2005年04月29日 13:28:00

很长一段时间没有更新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

学习笔记-基础Shell编程

  • 2015年12月14日 16:58
  • 480KB
  • 下载

linux shell编程进阶学习

新的一年,希望大家技术飞速提升!快来看哦! 第一节:基础 ls -lh  ——可以用户友好的方式看到文件大小 file 文件名 ——查看文件类型 stat 文件名 ——查看文件当前状态 man 命令...

健壮shell编程学习资料

  • 2013年03月25日 12:08
  • 7.73MB
  • 下载

学习linux的命令以及一些shell编程

  • 2013年03月21日 13:33
  • 224KB
  • 下载

《Linux命令行与shell脚本编程大全》 第十章 学习笔记

第十章:构建基本脚本 这一章的内容都是非常基础的,作者大多都一带而过,没有细讲 之前读的《Unix & Linux大学教程》中,对这节所提到的内容全部都有详细的讲解,所以想看笔记的同学可以参考我之...
  • su1216
  • su1216
  • 2013年01月09日 12:51
  • 5942

SHELL编程学习21天

  • 2010年04月06日 21:01
  • 13.93MB
  • 下载

Shell编程学习笔记-TinyLab出品

  • 2013年12月24日 01:45
  • 149KB
  • 下载

Shell编程学习(2)----输入输出的一些命令总结

1、命令替换当一个命令被包含在一对括号里并在括号前加上符号,如符号,如(command),或者被包含在反引号”" (如command`)中的时候,shell把它替换为这个命令的输出结果。这个过程被称为...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:shell编程学习
举报原因:
原因补充:

(最多只允许输入30个字)