1、描述shell程序的运行原理(可附带必要的图形说明); |
SHELL是一种特殊的程序,官方定义为是和内核的接口,类似于内核的代理人。人类和LINUX系统对话时,需要一个翻译,而shell就是这个翻译。我们用SHELL编辑自己想要执行的一系 列命令后,SHELL可以翻译给系统内核听,然后系统内核执行。 |
2、总结shell编程中所涉及到的所有知识点(如:变量、语法、命令状态等等等,要带图的哟); |
//以下实例来自iredmail的安装脚本 tmprootdir="$(dirname $0)" //定义临时目录,也就是shell中的变量 echo ${tmprootdir} | grep '^/' >/dev/null 2>&1 if [ X"$?" == X"0" ]; then //根据上文中最后的命令状态,判断是否执行 export ROOTDIR="${tmprootdir}" //同时使用了命令状态和if判断 else export ROOTDIR="$(pwd)" fi # Create SSL/TLS cert file. check_status_before_run generate_ssl_keys //check_status_before_run是个函数 #下面是这个函数的定义 check_status_before_run() { # If function was successfully executed, this function will write one line # in $STATUS_FILE: # # export status_[function_name]='DONE' # function_name="${1}" //利用位置参数来获得变量值 function_status_name="status_${function_name}" function_status_value="$(eval echo \$${function_status_name})" if [ X"${function_status_value}" == X"DONE" ]; then ECHO_SKIP "Function: $1." else $function_name #if [ X"$?" == X'0' ]; then # echo "export ${function_status_name}='DONE'" >> ${STATUS_FILE} #fi fi } #另一个函数的定义,用到了for循环,if判断 backup_file() { # Usage: backup_file file1 [file2 file3 ... fileN] if [ X"$#" != X"0" ]; then //$# 添加到Shell的参数个数 for conf_file in $@; do //利用for循环读取配置文件, if [ -f ${conf_file} ]; then if [ X"${IREDMAIL_DEBUG}" == X"YES" ]; then echo -e "${_BACKUP_FLAG} ${conf_file} -> $(basename ${conf_file}).${DATE}." fi cp -f ${conf_file} ${conf_file}.${DATE} else : fi done else : fi } |
3、总结课程所讲的所有循环语句、条件判断的使用方法及其相关示例;(if (jpg|png is not exist);echo ”You say a XX“) |
4、写一个脚本:如果某路径不存在,则将其创建为目录;否则显示其存在,并显示内容类型;(不要怀疑,就是这么简单) |
//目前就判断了目录和文件,其他类型的未做判断 cat a.sh #!/bin/bash if [ -z $1 ];then echo "命令用法: sh a.sh 文件名或者目录" exit fi if [ -e $1 ];then if [ -d $1 ];then echo "$1存在且是一个目录" elif [ -f $1 ];then echo "$1存在且是一个文件" fi else echo "文件或目录不存在" mkdir $1 echo "$1创建成功!!" fi [@iZ94lrg5ub8Z ~]$ sh a.sh /etc /etc存在且是一个目录 [@iZ94lrg5ub8Z ~]$ sh a.sh lamp.zip lamp.zip存在且是一个文件 [@iZ94lrg5ub8Z ~]$ sh a.sh lamp 文件或目录不存在 $ sh a.sh lazz 文件或目录不存在 lazz创建成功!! |
5、写一个脚本,完成如下功能;判断给定的两个数值,孰大孰小;给定数值的方法:脚本参数,命令交互; |
$ vim read.sh #!/bin/bash echo "请输入第一个数:" read first echo "请输入第二个数:" read second if (( $first > $second ));then echo "第一个数比第二个数大" else echo "第二个数比第一个数大" fi $ sh read.sh 请输入第一个数: 22 请输入第二个数: 33 第二个数比第一个数大 |
6、求100以内所有奇数之和 |
di第一 第一种方法 [levis@iZ94lrg5ub8Z ~]$ sh b.sh 2500 [levis@iZ94lrg5ub8Z ~]$ cat b.sh sum=0 for i in `seq 1 2 100` do let sum=sum+$i done echo $sum 第二种方法: [levis@iZ94lrg5ub8Z ~]$ sh b.sh 2500 [levis@iZ94lrg5ub8Z ~]$ cat b.sh sum=0 for i in {1..100..2} do let sum=sum+$i done echo $sum 第三种方法: [levis@iZ94lrg5ub8Z ~]$ sh c.sh 2500 [levis@iZ94lrg5ub8Z ~]$ cat c.sh #!/bin/bash sum=0 for ((i=1;i<=100;i++)) do if [ `expr $i % 2` -ne 0 ];then let sum=$sum+$i fi done echo $sum |
7、写一个脚本实现如下功能: (1) 传递两个文本文件路径给脚本; (2) 显示两个文件中空白行数较多的文件及其空白行的个数; (3) 显示两个文件中总行数较多的文件及其总行数; |
[levis@iZ94lrg5ub8Z ~]$ cat d.sh #!/bin/bash file1=$1 file2=$2 if [ $# != 2 ];then echo "命令格式不对, 命令格式: sh d.sh file1 file2" exit fi if [ ! -f $file1 ];then echo "file1 必须是文件格式" exit fi if [ ! -f $file2 ];then echo "file2 必须是文件格式" fi line1_space=`grep "^$" $file1 | wc -l` line2_space=`grep "^$" $file2 | wc -l` if (( $line1_space > $line2_space ));then echo "$file1的空白行数比较多,空行行数为$line1_space" else echo "$file2的空白行数比较多,空行行数为$line2_space" fi line1_sum=`cat $file1 | wc -l` line2_sum=`cat $file2 | wc -l` if (( $line1_sum > $line2_sum ));then echo "$file1行数比较多,总行数为$line1_sum" else echo "$file2行数比较多,总行数为$line2_sum" fi [levis@iZ94lrg5ub8Z ~]$ sh d.sh dd.txt /etc/init.d/functions /etc/init.d/functions的空白行数比较多,空行行数为72 /etc/init.d/functions行数比较多,总行数为812 [levis@iZ94lrg5ub8Z ~]$ sh d.sh /etc/rc. /etc/init.d/functions rc.d/ rc.local rc.sysinit [levis@iZ94lrg5ub8Z ~]$ sh d.sh /etc/rc.sysinit /etc/init.d/functions /etc/rc.sysinit的空白行数比较多,空行行数为96 /etc/init.d/functions行数比较多,总行数为812 |
8、写一个脚本 (1) 提示用户输入一个字符串; (2) 判断: 如果输入的是quit,则退出脚本; 否则,则显示其输入的字符串内容; |
[levis@iZ94lrg5ub8Z ~]$ cat f.sh #!/bin/bash while [ 1 -eq 1 ] do echo "输入一个字符串:" read answers if [ -z answers ];then echo "请输入字符串" fi if [ $answers == quit ];then echo "系统退出" exit fi echo "你输入的字符串是$answers" done [levis@iZ94lrg5ub8Z ~]$ sh f.sh 输入一个字符串: ss 你输入的字符串是ss 输入一个字符串: erer 你输入的字符串是erer 输入一个字符串: quit 系统退出 |
9、写一个脚本,打印2^n表;n等于一个用户输入的值;(不好意思,我调皮了) |
[levis@iZ94lrg5ub8Z ~]$ cat a.sh #!/bin/bash read -p "请输入一个数字:" num count=2 for i in $(seq 0 $num);do if [ $i -eq 0 ];then echo -e "1" elif [ $i -eq 1 ];then echo -e "2" elif [ $i -gt 1 ];then count+=x2 echo $count=$[2**$i] else echo "Error:请输入一个数字" fi done [levis@iZ94lrg5ub8Z ~]$ sh a.sh 请输入一个数字:3 1 2 2x2=4 2x2x2=8 |
11、写一个脚本,写这么几个函数:函数1、实现给定的两个数值的之和;函数2、取给定两个数值的最大公约数;函数3、取给定两个数值的最小公倍数;关于函数的选定、两个数值的大小都将通过交互式输入来提供。 |
原地 源码地址:http://20150721.blog.51cto.com/10649191/1695664 |
补充的一题sed和awk的用法 |
SED的用法总结 |
AWK的用法总结 |
2015年9月13日课程作业--关于SHELL的问题
原创
©著作权归作者所有:来自51CTO博客作者mailapp的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
2015年9月10日课程作业(rpm、yum)
1、rpm 程序包管理: 用法: rpm [选项...]查询/验证软件包选项: -a, --all  
软件包 配置文件 课程 package files