shell编程

     接触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进行了比较。

 

文件目录操作: 

-e filename file filename is existed?

-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)相关的设备是一个终端设备?

 

 

逻辑操作:
-a (And)逻辑与,操作符两边均为真,结果为真,否则为假。
-o (Or)逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。

 

测试字符串
string_operator可为:
= 两个字符串相等。
!= 两个字符串不等。
-z 空串。
-n 非空串。

 

测试数值
测试数值可以使用许多操作符,一般格式如下:
"number" numeric_operator  "number"
或者
[ "number" numeric_operator  "number" ]
numeric_operator可为:
-eq 数值相等。
-ne 数值不相等。
-gt (Greater than)第一个数大于第二个数。
-lt (Less than)第一个数小于第二个数。
-le 第一个数小于等于第二个数。
-ge 第一个数大于等于第二个数。
这里还是把数值看成字符串,如:
number="130" 或 number=130
[ "$number" -eq "130" ]


expr 命令一般用于整数值,但也可用于字符串。一般格式为:
expr argument operator argument
expr 也是一个手工命令行计数器。
使用乘号时,必须用反斜线屏蔽其特定含义。因为s h e l l可能会误解显示星号的意义。
如:expr 3 \* 3
expr 3 / 3
expr 命令用于记数:
number=1 --------number是字符串!!!!!
number=`expr $number + 1` #反引号即替代命令,expr $number + 1是命令,不能放在等号右边

所有数字可以用引号括起来,也可不括起来,因为本来就不存在数字,只有字符串。!!!!!!!!!
但字符串和数字也有不同,当是数字字符串时,才能用numeric_operator  


typeset -i VAR8
VAR8=1
while ((VAR8<4))
do
((VAR8 = VAR8 +1))
echo $VAR8
done

========自己的补充

在windows下使用cygwin的时候要加环境变量SHELLOPTS=igncr

 

#!/bin/sh

a='1.mp3' #不能写成a = '1.mp3'
echo `echo $a|sed 's/1/2/1'` #不能写成echo `echo $a|sed 's/1/2/1'`
for file in `ls`
do
	if [[ "$file" =~ ".mp3" ]]; then
		filetmp=`echo $file|sed 's/\[.*\]//1'`#也可以写成filetmp=${file##\[*\]}
		echo $filetmp
		echo "change $file to `echo $file|sed 's/\[.*\]//1'`" 
	fi 
done

 

#!/bin/sh
#[我听评书网www.5tps.com]凡人修仙传112.mp3 改名为 凡人修仙传112.mp3
for file in `ls`
do
	if [[ "$file" =~ ".mp3" ]]; then
		filetmp=`echo $file|sed 's/\[.*\]//1'`# #也可以写成filetmp=${file##\[*\]}
		echo "change $file to $filetmp" 
		#mv $file $filetmp
	fi 
done

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sagely/archive/2005/04/29/367871.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值