`
javaG
  • 浏览: 554949 次
  • 性别: 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编程入门经典--LINUX与UNIX Shell编程指南 (中文pdf版)

    《LINUX与UNIX Shell编程指南》是一本专为初学者设计的shell编程教程,它深入浅出地介绍了在Linux和UNIX系统中如何使用Shell进行高效自动化任务处理。Shell编程是Linux和UNIX系统中的核心技术,它允许用户通过命令行...

    Windows Shell 编程.pdf

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

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

    Shell编程是Linux/Unix操作系统中的一种重要工具,它允许用户通过命令行与系统进行交互,执行各种任务。本文将深入探讨Shell编程的基础知识,包括基本语法、常用的内置命令、条件语句、循环结构以及函数的使用,旨在...

    Linux与UNIX Shell编程指南.pdf

    "Linux与UNIX Shell编程指南" Linux与UNIX Shell编程指南是计算机科学领域中一本经典的指南手册,旨在帮助读者快速掌握Linux与UNIX操作系统下的shell编程技术。下面是从该书中生成的相关知识点: 1. Shell概述 ...

    LinuxShell编程基础教程.pdf

    Linux Shell 编程基础教程 本资源为 Linux Shell 编程基础教程,涵盖了 Linux Shell 编程的基础知识,包括语法基本介绍、变量、环境变量、Shell 命令和流程控制等。 一、语法基本介绍 在 Linux Shell 编程中,...

    Windows Shell 编程指南与实例

    Shell编程则允许开发者通过编写脚本或程序来自动化常见的系统任务,提高工作效率。 一、Windows Shell基础 Windows Shell编程的基础在于了解批处理(Batch)脚本和Windows Script Host (WSH)。批处理脚本是包含一...

    Shell编程中文手册.pdf

    Shell 编程中文手册 本手册涵盖了 Shell 编程的基础知识,包括 Shell 概述、Shell 解析器、Shell 脚本入门、Shell 中的变量等。 Shell 概述 Shell 是一种命令行接口,允许用户与操作系统进行交互。学习 Shell ...

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

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

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

    "shell编程--用户信息管理(模拟)" 本课设计的主要目的是让学生掌握 Linux 操作系统中 shell 脚本编程技术的各种知识点,包括变量定义、变量使用、循环控制结构、条件选择结构、用户交互、文件读写、文本内容分析...

    shell编程从入门到精通

    Shell编程是Linux和Unix系统中不可或缺的一部分,它是一种命令行解释器,同时也是脚本编程语言。通过Shell,用户可以高效地与操作系统交互,自动化日常任务,实现系统管理、数据处理和网络控制等功能。本教程“Shell...

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

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

    shell编程用户信息管理(模拟)课程设计说明书

    Shell 编程用户信息管理(模拟)课程设计说明书 该课程设计旨在掌握 Linux 操作系统中 shell 脚本编程技术的变量定义、变量使用、循环控制结构、条件选择结构、用户交互、文件读写、文本内容分析以及 Linux 重要...

    Shell 编程.pdf

    为什么要进行shell编程 在Linux 系统中,虽然有各种各样的图形化接口工具,但是shell仍然是一个非常灵活的工 具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使 大量的任务自动化,...

    实战LINUX_SHELL编程与服务器管理.pdf

    Linux Shell编程与服务器管理是系统管理员和网络管理员必须掌握的高级技能之一。Shell作为操作系统的一个重要组件,是用户与系统核心之间的接口,几乎所有管理者在日常工作中都会频繁地与Shell打交道。Shell具有解释...

    UNIX命令及SHELL编程

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

    shell编程题目练习

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

    绝版经典《Linux与UNIX Shell编程指南》中文文字PDF版

    《Linux与UNIX Shell编程指南》是一本深受欢迎的IT技术书籍,主要涵盖了Linux和UNIX操作系统中的Shell编程技术。这本书在IT领域中具有很高的价值,尤其是对于那些致力于提升系统管理技能和自动化任务处理能力的读者...

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

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

Global site tag (gtag.js) - Google Analytics