跪求linux shell编程实例大神!!!shell 编程求解!!!!

Linux下的shell编程入门 - Linux 时代 - ChinaUnix.Net
&&产品与方案
???????????????????????????????????
Linux下的shell编程入门
日期: 作者: 来自:
  通常情况下,我们从命令行输入命令每输入一次就能够得到系统的一次响应。一旦需要我们一个接着一个的输入命令而最后才得到结果的时候,这样的做法显然就没有效率。要达到这样的目的,通常我们利用shell程序或者shell脚本来实现。
  一、简介
  Shell编程有很多类似C语言和其他程序语言的特征,但是又没有编程语言那样复杂。Shell程序就是放在一个文件中的一系列Linux命令和实用程序,在执行的时候,通过Linux一个接着一个地解释和执行每个命令。
  下面我们来看一个简单的shell程序:
  1、首先建立一个内容如下的文件,名字为date,将其存放在目录下的bin子目录中。
  #Program date
  #usageto ::show the date in this way (注释)
  echo “Mr.$USER,Today is:”
  echo date “+%B%d%A”
  echo “Whish you a lucky day !”
  2、编辑完该文件之后它还不能执行,我们需要给它设置可执行权限。使用如下命令:
  chmod +x date
  通过以上过程之后,我们就可以像使用ls命令一样执行这个shell程序.
  [beichen@localhost bin]$ date
  Mr.beichen,Today is:
  January 13 Friday
  Whish you a lucky day !
  为了在任何目录里都可以执行这个程序,可以将bin的这个目录添加到路径中去。
  [beichen@localhost bin]$ PATH=$PATH:$HOME/bin
  (注:这里的$HOME代替的是/home/beichen,而bin目录是自己建的一个目录)
  另外一种执行date的方法就是把它作为一个参数传给shell命令:
  [beichen@localhost /]$ bash date
  Mr.beichen,Today is:
  January 13 Friday
  Whish you a lucky day !
  尽管在前面我们使用chmod +x date将date设置为可执行,其实不设置也没有关系,但在Linux里执行它,需要先告诉系统它是一个可执行的脚本。
  [beichen@localhost /]$ .date
  Mr.beichen,Today is:
  January 13 Friday
  Whish you a lucky day !
  即在date前面加上一个点”.”,并且用空格与后面的shell脚本的文件名隔开。当然,不推荐这样做。
  二、shell参数
  如同ls 命令可以接受目录等作为它的参数一样,在shell编程时同样可以使用参数。Shell有位置参数和内部参数。
  1、 位置参数
  由系统提供的参数称为位置参数。位置参数的值可以用$N得到,N是一个数字,如果为1,即$1.类似C语言中的数组,Linux会把输入的命令字符串分段并给每段进行标号,标号从0开始。第0号为程序名字,从1开始就表示传递给程序的参数。如$0表示程序的名字,$1表示传递给程序的第一个参数,以此类推。
  2、 内部参数
  上述过程中的$0是一个内部变量,它是必须的,而$1则可有可无。和$0一样的内部变量还有以下几个。
  $# ----传递给程序的总的参数数目
  $? ----上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。
  $* ----传递给程序的所有参数组成的字符串。
  下面举例进行说明:
  建立一个内容为如下的程序P1:
  echo “Program name is $0”
  echo “There are totally $# parameters passed to this program”
  echo “The last is $?”
  echo “The parameters are $*”
  执行后的结果如下:
  [beichen@localhost bin]$ P1 this is a test program //传递5个参数
  Program name is /home/beichen/bin/P1 //给出程序的完整路径和名字
  There are totally 5 parameters passed to this program //参数的总数
  The last is 0 //程序执行结果
  The parameters are this is a test program //返回有参数组成的字符串
  下面我们利用内部变量和位置参数编写一个名为del的简单删除程序:
  #name: del
  #author: liangnian
  #this program to compress a file to the dustbin
  if test $# -eq 0
  echo “Please specify a file!”
  gzip $1 //先对文件进行压缩
  mv $1.gz $HOME/dustbin //移动到回收站
  echo “File $1 is deleted !”
  三、变量表达式
  在上面我们编写的小程序中我们用到了一个关键字test,其实它是shell程序中的一个表达式?D?D比较(test)。通过和shell提供的if等条件语句(后面我们会介绍)相结合我们可以方便的完判断。
  其用法如下:
  test 表达式
  表达式所代表的操作符有字符串操作符、数字操作符、逻辑操作符以及文件操作符。其中文件操作符是一种shell独特的操作符,因为shell里的变量都是字符串,为了达到对文件进行操作的目的,于是才提供了这样的一种操作符。
  1、 字符串比较
  作用:测试字符串是否相等、长度是否为零,字符串是否为NULL(注:bash区分零长度字符串和空字符串)
  常用的字符穿操作符有:
  = 比较两个字符串是否相同,同则为“是”!= 比较两个字符串是否相同,不同则为“是”
  -n 比较字符串长度是否大于零,如果大于零则为“是”
  -z 比较字符串的穿度是否等于零,如果等于则为“是”
  2、 数字比较
  这里区别于其他编程语言,test语句不使用>?类似的符号来表达大小的比较,而是用整数式来表示这些。
  -eq 相等
  -ge 大于等于
  -le 小于等于
  -ne 不等于
  -gt 大于
  -lt 小于
  3、 逻辑操作! 反:与一个逻辑值相反的逻辑值
  -a 与(and):两个逻辑值为“是”返回值才为“是”,反之为“否”
  -o 或(or):两个逻辑值有一个为“是”,返回值就为“是”
  4、 文件操作
  文件测试表达式通常是为了测试文件的信息,一般由脚本来决定文件是否应该备份、复制或删除。由于test关于文件的操作符有很多,我们只列举一些常用的。
  -d 对象存在且为目录返回值为“是”
  -f 对象存在且为文件返回值为“是”
  -L 对象存在且为符号连接返回值为“是”
  -r 对象存在且可读则返回值为“是”
  -s 对象存在且长度非零则返回值为“是”
  -w 对象存在且可写则返回值为“是”
  -x 对象存在且可执行则返回值为“是”
  file1 ?Cnt(-ot) file2 文件1比文件2新(旧)
  四、循环结构语句
  shell常见的循环语句有for循环、while循环、until循环
  for 循环
  语法:for 变量 in 列表
  注:变量是要在循环内部用来指代当前所指代的列表中的那个对象的。
  列表是在for 循环的内部要操作的对象,可以是字符串也可以是文件,如果是文件则为文件名。
  例:删除垃圾箱中的所有.gz文件
  #delete all file with extension of “gz” in the dustbin
  for I in $HOME/dustbin/*.gz
  rm ?Cf $i
  echo “$i has been deleted!”
  执行结果如下:
  [beichen@localhost bin]$.f_rmgz
  /home/beichen/dustbin/nessus-4.0.0.2.tar.gz has been deleted!
  /home/beichen/dustbin/gftp-2.2.1.tar.gz has been deleted!
  While循环
  语法:while 表达式
  只要while表达式成立,do和done之间的操作就一直会进行。
  until循环
  语法:until 表达式
  重复do和done之间的操作直到表达式成立为止。
  #test until
  #add from 1 to 100
  total=0
  until test num ?Ceq 100
  total=`expr $total + $num` //注意,这里的引号是反引号,下同
  num=`expr $num+1`
  echo “The result is $total”
  执行结果如下:
  [beichen@localhost bin]$until
  The result is 5050!
  五、条件语句
  Shell程序中的条件语句主要有if语句、case语句;
  If语句
  语法:if 表达式1 then
  elif 表达式2 then
  elif 表达式3 then
  Linux里的if的结束标志是将if反过来写成fi;而elif其实是else if的缩写
  其中elif理论上可以有无限多个。
  Case语句
  语法:case 字符串 in
  值1|值2)
  操作::
  值3|值4)
  操作::
  值5|值6)
  操作::
  操作::
  case的作用就是当字符串与某个值相同是就执行那个值后面的操作。如果同一个操作对于多个值,则使用”|”将各个值分开。在case的每一个操作的最后面都有两个”::”,分号是必须的。
  case $USER in
  beichen)
  Echo “You are beichen!”;;
  liangnian)
  echo “You are liangnian”; //注意这里只有一个分号
  echo “Welcome!”;; //这里才是两个分号
  echo “You are root!:echo Welcome!”;; //将两命令写在一行,用一个分号作为分隔符
  echo “Who are you?$USER?”;;
  执行结果:
  [liangnian@localhost bin]$ test
  You are liangnian
  Welcome!
  关于shell编程基础的东西就介绍这么多,如果你想更进一步了解shell编程的知识,请查阅相关书籍。
本文被浏览次
Copyright &
ChinaUnix.net
All Rights Reserved
感谢所有关心和支持过ChinaUnix的朋友们千里之行 始于足下
欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 2290 人关注过本帖
标题:求助一下各位大神,一个删除文件的shell脚本。
等 级:新手上路
&&问题点数:0&&回复次数:6&&&
求助一下各位大神,一个删除文件的shell脚本。
在解压东西的时候没看路径,结果直接解压在当下了,但原先文件夹里有东西,所以我就在建了一个文件夹,解压进去,然后我想写一个脚本,删除当前文件夹里被之前解压出来的东西,(打个比方,A文件夹里有一堆乱糟糟的文件,B文件夹是之后重新解压的,现在要把:B里面有的文件,在A里面删除),请指点下,有点乱,不知到该怎么写~
搜索更多相关主题的帖子:
等 级:贵宾
威 望:12
帖 子:138
专家分:1003
#本脚本放在B目录里,在red hat Enterprise linux 5 测试通过
for file in *
&&& rm -f ../$file
echo &删除完成!&
等 级:贵宾
威 望:12
帖 子:138
专家分:1003
竟然没人顶一下,楼主也不来
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
路过不管有没有分,蹭过就知道
仰望星空...........不忘初心!
等 级:论坛游民
帖 子:25
专家分:10
低调路过!!!
just do it
等 级:新手上路
回复 3楼 elongtown
我错了,抱歉,来了来了,试了一下,妥了~~万分感谢~
等 级:新手上路
贡献一个我的,虽然是笨办法
#!/bin/bash
cd /usr/local/xx/unrar/yida&&&&&//(这个是重新建了文件夹,单独解压出来的)
cd /usr/local/xx/unrar&&&&&&&&& //(这个是解压错了,混在别的地方的文件)
意思就是,重新解压了一次,单独解压,然后查一下,有些什么,把查到的赋值给了a,然后在之前解压错的地方删除$a,办法很局限,还望谅解~
版权所有,并保留所有权利。
Powered by , Processed in 0.080313 second(s), 7 queries.
Copyright&, BCCN.NET, All Rights ReservedLinux环境下shell 编程,求大神解答,万分感谢。_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
Linux环境下shell 编程,求大神解答,万分感谢。
1、为班级创建用户,提示用户输入班级,输入学号的范围(范围改为个数),例如:
用户输入:jrw 则为金融网1106-9班创建jrw~jrw这些账户,
创建账户的同时为这些账户设置口令,口令为空
passwd -d jrw
2、编写...
我有更好的答案
#!/usr/bin/kshcal_id=1num_count=100sum_num=0while[$cal_id-le$num_count]dosum_num=`expr$cal_id+$sum_num`cal_id=`expr$cal_id+1`doneecho$sum_num
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包相关文章推荐
1.查找当前目录中所有大于500M的文件,把这些文件名写到一个文本文件中,并统计其个数。
find ./ -size +500M -type f | tee file_list | wc -l
在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。它类似于DOS下。它接收用户命令,然后调用相应的应用程序。同时它又是...
各位看官们。。。“咱们今天还是接着上一回的内容列举具体的例子给大家。闲话休说,言归正转".啊?这
是谁呀,我还没有说,怎么把我想说的话都说出来了?看来台下的看官已经习惯我的风格了,哈哈。各位
简介Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问...
什么是shell?Shell是一个命令解析器,是介于Linux操作系统的内核(kernel)与用户之间的一个绝缘层。shell脚本就是讲各类命令预先放入其中,方便一次性执行的一个程序文件,主要用于方便...
本文记录Linux Shell编程中常用基本知识,方便快速入门以及查询使用。
这几天博主刻苦研究了下 Shell 编程,感觉 Shell 编程是一门非常强大的语言。
下面就Shell 编程的几个点进行下讲解:
0.Shell 编程的基本含义 (一个最简单的Shell 程...
1. 文件权限
- rw-r--r-- 1
Fed 19 22:05
脚本调试的主要工作就是发现引发脚本错误的原因以及脚本源代码中定位错误行。归纳汇总了下,调试脚本时,我们可能会用到的几种方式,比如说:最简单的通过echo的方式,通过set -x的方式,比较高端一点的通...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&

我要回帖

更多关于 linuxshell编程 的文章

 

随机推荐