有没有懂shell的,帮我写写一个shell脚本本。

写给shell脚本初学者的话
我的图书馆
写给shell脚本初学者的话
三个多月前,我开始编程,当时对shell编程一窍不通,连最基本的变量赋值都一头雾水。经过三个多月的学习和练习,我的shell已经有了一点水平,至少坛子里的很多问题我都知道怎么解决。我想把我学习过程中的一点心得与诸位菜鸟们分享。& & & & & & & & 首先看些地介绍shell编程的书籍,我的手头只有一本《 与 shell编程指南》,我觉得写得实在不怎么样,但是因为手头只有这一本书,只好凑合着用了。实际上,这本书我只翻了翻(因为觉得写得不好,所以没细看)第18章,介绍shell分支和循环流程的,然后自己写个例子,试验shell流程。会了以后,就把这本书扔到一边了。& & & & 然后,我开始在本版潜水,先看了置顶的帖子,发现“十三问”很不错,就copy了下来。然后浏览本版精华区,把我认为有用的文章全部copy下来,预备慢慢看。接着就是细读了“十三问”,把里面的例子在我的环境下面试验。网中人版主水平很高,对shell的研究非常深入透彻,十三问可以解决大部分人对于shell的很多疑问,不管是初学者还是老鸟这篇帖子都很适用。这样,对于shell编程所需要的基本元素我就了解了,可以试着应用了。& & & & 接着,在坛子里面继续潜水,不是发问,而是看看别人提出的初级问题,先不看别人的解答,试着自己先解答,然后把自己的方案贴出去,再与别人的方案比对,寻找差距。别人会对你的方案提出修改和批评意见,虚心接受,在斗争中成长。同时,研究awk的用法,因为我知道awk是shell下面功能最强的一个工具。我的学习资料是本版精华区的“Unix awk使用手册”,这个帖子很好,系统的介绍了awk的用法。& & & & 再接着,因为熟悉了awk,试着用awk解决一些坛子里面提出的问题,发现awk果然好用,但是也有局限性,所以开始学习。我的学习资料是本版精华区的“通用线程 -- sed 实例”。对sed有了初步了解后,开始试着用sed解决一些问题。然后又细读了本版精华区的“通过几个例子看sed的模式空间与保持空间”和“sed 学习笔记(与大家共勉)”。两篇帖子通过例子深入的介绍了sed的高级功能,我试着把几乎每一个例子都看懂了,有的实在太复杂,只好先放放。这样,我的sed水平就不低了。& & & & & & & & 要注意,正则表达式是shell编程很重要的一个内容,它无所不在。在学习awk和sed的过程中,由于它们和正则表达式结合得非常紧密,因此我也慢慢的熟悉了正则表达式。如果要看资料的话,本版精华有一篇“正则表达式语法”和一篇“正则表达式介绍”都是不错的材料。& & & & 至此,由于掌握了shell基本编程、正则表达式和awk、sed的用法,我的shell已经有了一定的水平,接下去是继续提高。提高的方式是继续潜水,给一些问题做出解答,同时研究其它大侠的解决方案。ad版主和r2007版主的水平很高,他们的代码总是十分简洁,研究他们的代码可以得到不少帮助。bjgirl很热心,熟悉的shell命令甚至比几位版主都多,研究她的代码可以学习到一些边边角角的shell命令的用法。还可以研究精华里面一些巧妙的或是复杂的shell例子,比如c1l2d3大侠的五子棋程序等等(那个五子棋让我PF得五体投地)。另外,把潜水过程中发现的一些精巧的解决方案和心得记录下来,比如ad版主提出的如何判断有连续重复字母的单词,r2007版主的洗牌方案等等问题的帖子,写在我的一篇“shell用法心得”笔记里面,有不懂的地方时,把这篇笔记拿出来翻翻,往往可以得到以前类似题目的解决办法。& & & & 在三个多月的学习过程中,我印象中只发贴提问过一次,是关于sed命令序列的执行组合、执行条件、执行顺序的问题。遇到其它不懂的地方时,争取自己解决,这也是我从幼儿园开始一贯的学习作风。只有自己思考,才能更快提高,除非你很懂得提问技巧,否则一味地发贴提问并没有太大的帮助。
文章摘自:
TA的最新馆藏[转]&
喜欢该文的人也喜欢文章数:135
访问量:20158
注册日期:
阅读量:1297
阅读量:3317
阅读量:580886
阅读量:464437
51CTO推荐博文
任何优秀的脚本都应该具有帮助和输入参数
脚本 b2d 将二进制数 (比如 1101) 转换为相应的十进制数。这也是一个用expr命令进行数学运算的例子:
如若直接输入./name.sh&
b2d -- convert binary to decimal
USAGE: b2d [-h] binarynum
OPTIONS: -h help text
EXAMPLE: b2d 111010
will return 58
./name.sh 11
binary 11 is decimal 3
#!/bin/bash
# vim: set sw=4 ts=4 et:
cat && HELP
b2d -- convert binary to decimal
USAGE: b2d [-h] binarynum
OPTIONS: -h help text
EXAMPLE: b2d 111010
will return 58
# print an error and exit
lastchar()
# return the last character of a string in $rval
if [ -z &$1& ]; then
# empty string
# wc puts some space behind the output this is why we need sed:
numofchar=`echo -n &$1& | sed 's/ //g' | wc -c `
# now cut out the last char
rval=`echo -n &$1& | cut -b $numofchar`
# remove the last character in string and return it in $rval
if [ -z &$1& ]; then
# empty string
# wc puts some space behind the output this is why we need sed:
numofchar=`echo -n &$1& | wc -c | sed 's/ //g' `
if [ &$numofchar& = &1& ]; then
# only one char in string
numofcharminus1=`expr $numofchar &-& 1`
# now cut all but the last char:
rval=`echo -n &$1& | cut -b -$numofcharminus1`
#原来的 rval=`echo -n &$1& | cut -b 0-${numofcharminus1}`运行时出错.
#原因是cut从1开始计数,应该是cut -b 1-${numofcharminus1}
while [ -n &$1& ]; do
case $1 in
-h)shift 1;; # function help is called
--); # end of options
-*) error &error: no such option $1. -h for help&;;
# The main program
# one arg must be given:
[ -z &$1& ] && help
binnum=&$1&
binnumorig=&$1&
while [ -n &$binnum& ]; do
lastchar &$binnum&
if [ &$rval& = &1& ]; then
sum=`expr &$weight& &+& &$sum&`
# remove the last position in $binnum
chop &$binnum&
binnum=&$rval&
weight=`expr &$weight& &*& 2`
echo &binary $binnumorig is decimal $sum&
#本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
本文收录至博客专题:《》用户名:影中的你
文章数:41
评论数:83
访问量:46578
注册日期:
阅读量:1297
阅读量:3317
阅读量:580886
阅读量:464437
51CTO推荐博文
Shell脚本编程知识点
shell编程:提供了编程能力,被称作脚本编程,将一种语言翻译成另一个语言编程语言:机器语言(0、1代码)、汇编语言(人类可识别的语言)、高级语言(接近人类语言)
1、静态语言:编译型语言,这种语言有一个开发环境,不需要借助于额外的二进制程序,可以直接写代码,写完代码后,利用编译器将其直接转换成二进制以后,可以独立运行。强类型语言(变量),c、c++、java、c# 关键字:最后能够被我们的解释器或编译器直接转换成能够被机器识别的机器代码或控制指令。转换完成后才运行。事先转换成可执行格式。
2、动态语言:解释型语言,通常是弱类型语言,边解释边执行asp、asp.net、PHP、SHELL、PYthon、perl运行bash脚本时,本身应该有bash。面向对象:就是把整个我们要实现的项目抽象成一个一个的对象,并且定义对象之间的动作,就是可发生的操作来完成的,更适合开发大应用程序:JAVA 、PYthon 、Perl 、c++。面向过程:就是把编程立足点主要在于问题解决过程本身:shell、c
3、为使shell编程更有效,系统提供了一些shell变量。shell变量可以保存诸如路径名、文件名或者一个数字这样的变量名。shell将其中任何设置都看做文本字符串。变量:按照定义来说,变量是存储设备中的一些可读写的存储单元.变量可以定制用户本身的工作环境。使用变量可以保存有用信息,使系统获知用户相关设置。变量也用于保存暂时信息;内存:是编址的存储单元;变量类型:事先确定数据的存储格式和长度
shell:弱类型编程语言,下面介绍一下什么是强类型语言和弱类型语言
强类型:变量在使用之前,必须事先声明,甚至还需要初始化null;数值初始化为空
弱类型:变量用时声明,甚至不区分类型;若不区分类型,一般都默认为字符串。
变量赋值:VAR_NAME=VALUE
3、下面我们介绍一下bash变量类型:有两种变量,本地和环境。严格地说可以有4种,但其余两种是只读的,可以认为是特殊变量,它用于向shell脚本传递参数。
3.1、 环境变量:用于所有用户进程(经常称为子进程)。登录进程称为父进程。s h e l l中执行的用户进程均称为子进程。不像本地变量(只用于现在的s h e l l)环境变量可用于所有子进程,这包括编辑器、脚本和应用。环境变量可以在命令行中设置,但用户注销时这些值将丢失,因此最好在. profile文件中定义。系统管理员可能在/etc/profile文件中已经设置了一些环境变量。将之放入profile文件意味着每次登录时这些值 都将被初始化。传统上,所有环境变量均为大写。环境变量应用于用户进程前,必须用export命令导出。环境变量与本地变量设置方式相同。作用域为当前shell进程及其子进程 export VARNAME=VALUE&导出&,例如echo $PATH&》export PATH=$PATH:/usr/local/apache/bin
3.1.1 设置环境变量
VARIABLE-NAME=value;export VARIABLE-NAME
在两个命令之间是一个分号,也可以这样写:
VARIABLE-NAME=value
export VARIABLE-NAME
3.1.2 显示环境变量
显示环境变量与显示本地变量一样,用echo命令即可。
使用env命令可以查看所有的环境变量。
3.1.3 清除环境变量
使用unset命令清除环境变量
unset VARIABLE-NAME
脚本:命令的堆砌,按实际需要,结合命令流程控制机制,脚本在执行时会启动一个子shell进程: 命令行中启动的脚本会继承当前shell环境变量;系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境
3.2、本地变量:set VARNAME=VALUE:作用域为整个bash进程 (set一般省略);撤消变量:unset NAME。查看当前shell中变量:set 不带任何参数和选项;查看当前shell中的环境变量:printenv ,env ,export
3.3、局部变量:localVARNAME=VALUE:作用域为当前代码段
bash:变量是进程的变量,在父bash中生成的变量在子bash中不存在。引用变量:$ {name} ,括号有时可省略,如:anmail = pig&& ;echo &there some ${animal}s&
3.4、位置变量:$1,$2........(使用到了shift:轮换)
3.5、特殊变量:(bash内置)系统变量保存某些特殊
$?:上一个命令的执行状态返回值: echo $?
$#: 参数的个数
$*:参数列表
$@:参数列表
4、引用变量或变量中的字符长度
如:A=start &&》判断A有多少个字符
echo ${#A} :引用变量名的长度(#号表示变量中所包含字符串的长度)
${#VARNAME}:就可以取字符串的长度
stty -F /dev/console size:可以查看物理终端一屏有多少行多少列
stty -F /dev/console size | awk '{print $2}' :可以取出一屏有多少列
也可以写成:A=`stty -F /dev/console size` &&》 echo ${A#* }
还可以写成:stty -F /dev/console size | cut &d& & -f2
知识点:echo ${A#* }:表示从左往右找,找到第一个以空格为分隔符的把左侧的去了
echo ${A##* }:从左往右找,找到最后一个空格,把前面的去了
这两种分隔符的不同之处就是第一个空格为分隔符和最后一空格为个分隔符
还有与之相反的: 如图所示
5、变量赋值
${parameter:-word}:如果parameter为空或未定义,则变量展开为&word&;否则展开为parameter的值
${parameter:+word}:如果parameter为空或未定义,不做任何操作,否则,则变量展开为&word&;
${parameter:=word}:如果parameter为空或未定义,则变量展开为&word&;并将展开的值赋值给parameter的值
${parameter:offset}
${parameter:offset:length}:取子串,从offset处的后一个字符开始,取length长的子chuan
如图:取字符串长度
如图:取字符
6、如果函数变量与全局变量同名,就要用到局部变量:
local VAR_NAME
#!/bin/bash
for I in `seq $a 10` ; do
显示结果为:7,8,9,10
#!/bin/bash
for I in `seq $a 10` ; do
显示结果为:1,2,3,4,5,6,7,8,9,10
在这里只讲了部分shell知识点。
值得一看哦!本文出自 “” 博客,谢绝转载!
了这篇文章
类别:┆阅读(0)┆评论(0)
本文收录至博客专题:《》我想写一个shell脚本,然后在脚本里实现操作远程电脑:_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
我想写一个shell脚本,然后在脚本里实现操作远程电脑:
用shell脚本实现,ssh链接到远程电脑上,然后在远程电脑上安装mysql 等程序 ,怎么实现。我写了一个 #!/bin/bashssh -i ~/wangning/wangning.pem ec2-user@ec2-54-224-pute-sudo touch wangningls这个程序远程链接上远程电脑之后就不...
我有更好的答案
..所有安装命令写在此处&或者写一个mysql安装脚本,假设mysql.shssh root@ip & mysqlssh root@ip &
刚才 试了一下
可以了 ,谢谢你 非常感谢你
采纳率:53%
来自团队:
可以使用expect,如果服务器已安装的话
可以的啊。我帮你实现吧
为您推荐:
其他类似问题
shell脚本的相关知识
等待您来回答想写个shell脚本,获取到SQL中查询到的字段的值,赋给shell脚本中定义的变量,写入文件du.txt中.-Shell 怎么样把一条命令的返回的结果值 赋给一个变...
想写个shell脚本,获取到SQL中查询到的字段的值,赋给shell脚本中定义的变量,写入文件du.txt中.
想写个shell脚本,获取到SQL中查询到的字段的值,赋给shell脚本中定义的变量,写入文件du.txt中.
相关说明:
能不能写详细点,谢谢啦我是这样写的,你看对不对isql &&!select enabledate from cachet where accno ='';!while read enabledatedoaa=$doneecho &$aa&;
while read enabledate
doneecho &$__aa&;
我想写一个shell脚本,可以把终端输入的结果写入到某个文件。……
read -p &请输入版本号: & vermyStr=&BUILD_NUMBER=$ver&ech...
怎么在用shell脚本读取一个文件中指定的内容……
cat yourfile|grep &xxx& 脚本里面就可以: a=`cat yourfile|g...
linux 执行shell脚本并将返回的信息写到指定的文件,这个要怎么写……
楼上正解,使用script.sh | tee -a filelog可以追加而不覆盖; 用重定向也可以...
shell脚本中echo怎么将变量的值写到文件中去……
应该是content=&ggggggggggggg。..&然后echo &$content& && ...
一.编写一个Shell脚本,实现如下功能: 1、从脚本参数获取到的目录名列表;……
3.# !/bin/bash cd $1 ls –a|grep ‘*.dat’ ls –a|grep...
我有一个shell脚本,想把输出结果写到另一个文件中,请问脚本应该怎么添加命令?……
是不是你&号前后的空格没打啊?依稀记得要空格的(以前弄过,有点忘记了)。
用linux编写一个shell脚本 比如有20行~输入第20行 就提取15到19行的内容~怎么解~谢...……
#!/bin/shread -p &Input line num: & linelet end=li...
通过shell脚本,将一个文件写入到另一个文件的后面?……
1、用最简单的cat 命令就可实现:cat b && a (注意之间的空格) 2、还有用SED命令来...
shell脚本怎样读取文件的值,并赋值给变量……
#!/bin/bash#使用方法:./script.sh filenamea=$(sed -n '$...
shell编程,写个shell脚本,要求从一个文档或者excel中读取数据,数据中有地市编码……
hell是无法对EXCEl文件进行处理的,PERL和JAVA则可以利用对应的对象或函数对EXCEL文...
也许你也感兴趣的内容

我要回帖

更多关于 看不懂shell脚本内容 的文章

 

随机推荐