`
javaG
  • 浏览: 550181 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    shell 编程指南pdf

    第四部分 基础shell编程 第16章 shell脚本介绍 151 16.1 使用shell脚本的原因 151 16.2 脚本内容 151 16.3 运行一段脚本 152 16.4 小结 153 第17章 条件测试 154 17.1 测试文件状态 154 17.2 测试时使用逻辑操作符 ...

    shell编程指南shell编程指南shell编程指南shell编程指南

    shell编程指南shell编程指南shell编程指南shell编程指南shell编程指南shell编程指南shell编程指南shell编程指南

    shell编程教程.chm

    shell编程-shell编程-分支语句(1) shell编程-shell编程-分支语句(2) shell编程-shell编程-循环语句(1) shell编程-shell编程-循环语句(2) Linux的shell编程(一) Linux的shell编程(二) Linux的...

    绝版经典 LINUX与UNIX SHELL编程指南 PDF 高清版 [16.3M]

    本书通过各种实用的系统管理小技巧和趣味脚本代码,详尽地介绍了shell编程各个不同的方面。学完本书后,你将成为一名shell编程高手。 内容简介 本书共分五部分 ,详细介绍了SHELL编程技巧,各种UNIX命令及语法,还...

    shell编程入门经典--LINUX与UNIX Shell编程指南 (中文pdf版)

    shell编程入门经典--LINUX与UNIX Shell编程指南 (中文pdf版)

    Shell编程

    Shell编程Shell编程Shell编程Shell编程Shell编程Shell编程Shell编程Shell编程Shell编程Shell编程Shell编程

    Shell编程高级进阶系列视频.zip

    13Linux下Shell编程之While case演练 14Linux下Shell编程之While case演练 15Shell编程之函数及脚本案例讲解 16Shell编程之函数及脚本案例讲解 17Linux下Shell编程FIND、SED命令实战 18Linux下Shell编程FIND、SED...

    Linux操作系统Shell编程

    经典Linux和unix的Shell编程,按照模板练习即可快速提高。

    LINUX与UNIX SHELL编程指南

    LINUX与UNIX SHELL编程指南

    shell编程入门教程+shell脚本专家指南+UNIX.shell编程24小时教程.rar

    shell编程入门教程+shell脚本专家指南+UNIX.shell编程24小时教程

    shell编程题目练习

    shell编程题目练习,练习基本的shell编程,学习脚本语言,提高效率

    UNIX命令及SHELL编程

    这是一套完整的Unix培训教材,包括Unix常用命令及SHELL编程基础与高级技巧,PDF格式,共30个文件。另有2个Word文档。包内文件清单如下: 01_Shell-文件安全与权限.PDF 02_Shell-使用find和xargs.PDF 03_Shell-...

    Linux Shell编程从初学到精通 第2版

    第1章 Shell脚本编程概述 1 第2章 Linux文件系统和文本编辑器 12 第3章 正则表达式 43 第4章 sed命令和awk编程 64 第5章 文件的排序、合并和分割 105 第6章 变量和引用 133 ...第17章 bash Shell编程范例 420

    Shell编程入门基础必备视频教程.zip

    1Linux下Shell编程入门及变量讲解.mp4 2Linux下Shell编程入门及变量讲解.mp4 3Shell编程企业实战菜单系列.mp4 4Shell编程企业实战菜单系列.mp4 5Linux下LAMP实战及脚本编程思路讲解.mp4 6Linux下LAMP实战及脚本编程...

    shell编程--用户信息管理(模拟).doc

    shell编程--用户信息管理

    Linux与Unix shell编程指南(完整高清版)

    Linux与Unix shell编程指南(完整高清版)Linux与Unix shell编程指南(完整高清版)Linux与Unix shell编程指南(完整高清版)Linux与Unix shell编程指南(完整高清版)Linux与Unix shell编程指南(完整高清版)Linux...

    Windows Shell 编程.pdf

    在使用windows shell扩张编程工具的过程中深切体会到windows shell技术资料的重要性,为此,根据Dino Esposito的《Visual C++ Windows Shell Programming》为蓝本,编译形成以下文字,为希望使用windows shell编程的...

    LinuxShell编程基础教程.pdf

    LinuxShell编程基础教程.pdf

    Unix Shell Shell编程

    6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书

Global site tag (gtag.js) - Google Analytics