本帖最后由 marquis 于 2013-7-16 22:28 编辑
1、设计一个程序cuts,它由标准输入读取数据,获取有第一个参数n和第二个参数m所限定范围的数据,n和m都是整数,即从输入的字符串中抽取第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
-gt:大于 -le:小于等于 如果上一条命令执行后的结束代码不是0则执行下面的命令(then) 5、编写一个shell脚本,并利用函数实现数列求和运算。即主程序接受两个数字,分别作为数列头和数列尾,如果第一个数字不小于第二个数字则输出“wrong number”,否则将这两个数字传递给函数;函数把这两个数字中间的数字加起来求和,并输出。 如:当输入 3 6时,函数计算 3+4+5+6的值并输出。
Function shulie()是一个函数,shulie $a $b 是传递参数给函数 6、编写特洛伊木马shell脚本。以文本方式登陆界面,接收用户输入的名字和密码。一旦用户在这种伪装界面登陆,就获取用户名和密码,并保存在指定的文件中。接着睡眠几秒,然后显示录入错误的信息,使用户以为输入有误。最后在调用真正的登陆程序,允许用户正常登陆。
7、编写shell脚本,创建一个5个元素的数组,输出各个元素的值
A是数组名,初始化A数组的值,以空格隔开 8、编写一个脚本,用于统计所指定文件的行数总数。输出结果为各个文件的名字+行数,以及总行数。 如:当输入./脚本名 file1 file2,脚本计算file1和file2两个文件的总行数
-l 是统计行数的参数 9、编写一个shell脚本,根据键盘输入的值,给出对应的提示;输入[A – Z ],输出Uppercase Letter;输入[a-z],输出Lowercase Letter;输入[0-9],输出Digit;输入其他,输出Punctuation,whitespace, or other
1. 在脚本最前面加入如下句: export LC_ALL=C
作用就是 specifies the ANSI C locale
2. 将判断条件作如下改动(改为符合POSIX标准的集合):
[A-Z] 改为 [[:upper:]]
[a-z] 改为 [[:lower:]]Case要在每个条件末尾加;; esac 10、编写shell脚本,提示用户输入用户名,并判断此用户名是否存在与系统用户中
grep "$name"/etc/passwd > /dev/null 2>&1 //探索与变量name内相匹配的字符
不管结果是是否正确信息扔到/dev/null垃圾箱
2>&1不显示任何信息操作信息
if [ $? -eq 0 ] ;then
//判断$? 是否等于 0 $?里的数值跟你上一个命令执行的成功与否有关
//如果你可以通过输入一条命令进行试验
然后通过
//pwd;echo $? $?结果为0
//asdfasdf;echo $?结果127
|