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编程

一:起因 (0)也许由于一时的冲动使得你开始关注并学习shell编程;亦许由于是“道听途说”shell的威力很大;亦许由于shell编程的魅力;亦许由于作为一个coder的偏好;亦许…… (1)先来搞...
  • u010700335
  • u010700335
  • 2015年05月07日 16:42
  • 2436

shell编程初步学习

第十三章 总结 shellscript shell script是利用shell的功能所写的一个“程序”(program),这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在...
  • yzhang6_10
  • yzhang6_10
  • 2016年07月04日 20:08
  • 4415

shell编程心得

参考地址: http://blog.csdn.net/zhuying_linux/article/details/6630220 优点: shell简单、灵活,,对于linux系统的...
  • u012749168
  • u012749168
  • 2016年10月11日 16:37
  • 449

Shell编程入门总结(二)

本文的主要内容: 1、流程控制:while/until 循环 2、流程控制:case 分支 3、流程控制:for 循环 4、位置参数...
  • CSDN_SXL
  • CSDN_SXL
  • 2016年04月29日 23:50
  • 3062

Shell编程入门总结(一)

本文的主要内容: 1、编写Shell脚本的一般步骤 2、在Shell脚本中输出文本 3、Shell脚本中的变量 4、Shell脚本中的函数 5、流程控制:if 分支结构 6、Shell中读取键盘输入...
  • CSDN_SXL
  • CSDN_SXL
  • 2016年04月28日 21:55
  • 5564

UNIX再学习 -- shell编程

UNIX环境高级编程看了三章,遇到不少重定向等shell命令。本想到Linux时再讲,看来有必要提前了。之前有看过一本《嵌入式Linux软硬件开发详解》这本书里有简单介绍了一部分shell常用命令,就...
  • qq_29350001
  • qq_29350001
  • 2017年03月21日 14:45
  • 1460

Shell编程详解

Shell编程详解       Shell简介   概述 Shell是一种具备特殊功能的程序,它提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令,并把它送入内核去执行。内核是...
  • u011204847
  • u011204847
  • 2016年04月19日 00:39
  • 18464

Linux程序设计(Linux shell编程的例子:总结)

各位看官们。。。“咱们今天还是接着上一回的内容列举具体的例子给大家。闲话休说,言归正转".啊?这 是谁呀,我还没有说,怎么把我想说的话都说出来了?看来台下的看官已经习惯我的风格了,哈哈。各位 看官...
  • talk_8
  • talk_8
  • 2015年05月01日 19:11
  • 1307

《Power Shell高级编程》学习:第1章 PowerShell简介

Windows PowerShell设计原则 Windows PowerShell快速入门 直接双击 Windows PowerShell 快捷方式或者在“运行”对话框中输入 “PowerShell”...
  • yenange
  • yenange
  • 2016年05月26日 15:21
  • 2390

Shell高级编程学习笔记(基础篇)

目录 1.shell脚本的执行方法   2.shell的变量类型   3.shell特殊变量 4.变量子串的常用操作   5.批量修改文件名实践    6.变量替换 7.在shell中计算字符串...
  • Erica_1230
  • Erica_1230
  • 2017年05月07日 15:14
  • 755
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:shell编程学习
举报原因:
原因补充:

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