Board logo

标题: [分享] 分享一些简单的shell脚本 [打印本页]

作者: marquis    时间: 2013-7-16 22:23     标题: 分享一些简单的shell脚本

本帖最后由 marquis 于 2013-7-16 22:28 编辑

1、设计一个程序cuts,它由标准输入读取数据,获取有第一个参数n和第二个参数m所限定范围的数据,nm都是整数,即从输入的字符串中抽取第n个字符至第m个字符之间的所有字符(包括这两个字符)并显示出来。

$ cuts 11 14

This is a test of cuts program(回车)

test(显示结果)

      #!/bin/bash    它的作用就是告诉shell,里面的脚本使用那种解析器来执行的脚本
      read ch;
      echo $
ch| cut -c $1-$2; #$1和$2分别是命令的第一个和第二个数
      exit;

cut是以每一行为一个处理对象的, 字符(characters),用选项-c,中文字符和空格都算一个字符

2、利用for循环将当前目录下的.c文件移到指定的目录下,并按文件大小排序,显示移动后指定目录的内容。

#!/bin/bash

for file in `ls|grep “.*.c”`     要用到ESC 下面的符号

{

mv -i $file./a   -i是文件移动同文件名会有提示

}

ls –lS ./a     -S是按大小排序

3、编写一个shell脚本,求斐波那契奇数列的前10项及总和。

#!/bin/bash

i=1

j=0

sum=0

for(( k=0; k<10; k++ ))

do

echo –n “$i,”    -n不能再最后换行 echo输出流

let sum+=I       let linux的整数运算命令

let m=i

let i+=j

let j=m

done

echo “sum=$sum”

4、编写一个shell脚本,程序运行时,要求输入两个数字。然后判断数字的大小,如果两个数字的和大于100,就输出“x+y>100;如果两个数字的和小于等于100并且大于10,就输出“x+y>10;如果x>y,则求出x除以y的余数并输出“x mod y = ?(把计算的值代替问号)”,否则求出y除以x的余数并输出“y mod x = ?

#!/bin/bash

QQ图片20130716221706.jpg


-gt:大于   -le:小于等于    如果上一条命令执行后的结束代码不是0则执行下面的命令(then

5、编写一个shell脚本,并利用函数实现数列求和运算。即主程序接受两个数字,分别作为数列头和数列尾,如果第一个数字不小于第二个数字则输出“wrong number”,否则将这两个数字传递给函数;函数把这两个数字中间的数字加起来求和,并输出。

如:当输入  3   6时,函数计算 3+4+5+6的值并输出。

QQ图片20130716221723.jpg


Function shulie()是一个函数,shulie $a $b 是传递参数给函数

6、编写特洛伊木马shell脚本。以文本方式登陆界面,接收用户输入的名字和密码。一旦用户在这种伪装界面登陆,就获取用户名和密码,并保存在指定的文件中。接着睡眠几秒,然后显示录入错误的信息,使用户以为输入有误。最后在调用真正的登陆程序,允许用户正常登陆。


7、编写shell脚本,创建一个5个元素的数组,输出各个元素的值

      QQ图片20130716221732.jpg

A是数组名,初始化A数组的值,以空格隔开

8、编写一个脚本,用于统计所指定文件的行数总数。输出结果为各个文件的名字+行数,以及总行数。

如:当输入./脚本名 file1 file2,脚本计算file1file2两个文件的总行数

QQ图片20130716221755.jpg


-l 是统计行数的参数

9、编写一个shell脚本,根据键盘输入的值,给出对应的提示;输入[A – Z ],输出Uppercase Letter;输入[a-z],输出Lowercase Letter;输入[0-9],输出Digit;输入其他,输出Punctuation,whitespace, or other

      QQ图片20130716221805.jpg

1. 在脚本最前面加入如下句: export LC_ALL=C
   
作用就是 specifies the ANSI C locale
2.
将判断条件作如下改动(改为符合POSIX标准的集合):
[A-Z]
改为 [[:upper:]]
[a-z]
改为 [[:lower:]]

Case要在每个条件末尾加;; esac

10、编写shell脚本,提示用户输入用户名,并判断此用户名是否存在与系统用户中

      QQ图片20130716221813.jpg

grep "$name"/etc/passwd > /dev/null 2>&1  

//探索与变量name内相匹配的字符
不管结果是是否正确信息扔到/dev/null垃圾箱
2>&1
不显示任何信息操作信息


if [ $? -eq 0 ] ;then            
//
判断$? 是否等于 0 $?里的数值跟你上一个命令执行的成功与否有关
//
如果你可以通过输入一条命令进行试验
然后通过
//pwd;echo $? $?
结果为0
//asdfasdf;echo $?
结果127



图片附件: QQ图片20130716221706.jpg (2013-7-16 22:20, 19.14 KB) / 下载次数 5837
http://wdlinux.cn/bbs/attachment.php?aid=3220&k=367ccc26b0234d565990ef3f4e366961&t=1733239932&sid=MiXGm0



图片附件: QQ图片20130716221723.jpg (2013-7-16 22:20, 14.26 KB) / 下载次数 5817
http://wdlinux.cn/bbs/attachment.php?aid=3221&k=5e42d50a97ebb9de3de6d2698fa0963f&t=1733239932&sid=MiXGm0



图片附件: QQ图片20130716221732.jpg (2013-7-16 22:20, 7.59 KB) / 下载次数 5828
http://wdlinux.cn/bbs/attachment.php?aid=3222&k=d3a05f7dc1008d13058e31e64fa31a55&t=1733239932&sid=MiXGm0



图片附件: QQ图片20130716221755.jpg (2013-7-16 22:20, 2.77 KB) / 下载次数 5795
http://wdlinux.cn/bbs/attachment.php?aid=3223&k=e165231b4345119e6ffd517e2a8f4785&t=1733239932&sid=MiXGm0



图片附件: QQ图片20130716221805.jpg (2013-7-16 22:20, 19.41 KB) / 下载次数 5783
http://wdlinux.cn/bbs/attachment.php?aid=3224&k=01911f9053727bfbcf8fe7919fa66e4b&t=1733239932&sid=MiXGm0



图片附件: QQ图片20130716221813.jpg (2013-7-16 22:20, 11.28 KB) / 下载次数 5775
http://wdlinux.cn/bbs/attachment.php?aid=3225&k=408f3f6d83febc801f67aabc22ad1eaa&t=1733239932&sid=MiXGm0






欢迎光临 WDlinux官方论坛 (http://wdlinux.cn/bbs/) Powered by Discuz! 7.2