免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: gxyyq
打印 上一主题 下一主题

[学习共享] 整理了几道Shell编程实例,针对新手! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2014-04-10 18:48 |只看该作者
初学者来学习学习  

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
12 [报告]
发表于 2014-04-10 19:10 |只看该作者
Good work!

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
13 [报告]
发表于 2014-04-10 21:52 |只看该作者
本帖最后由 关阴月飞 于 2015-07-06 11:42 编辑

闲来无事,也写写:
1. 在/home目录中创建一百个目录,目录名称依次为a1……a100.
  1. mkdir /home/a{1..100}
复制代码
2.  编写一个脚本,自动将用户主目录下所有小于5KB的文件打包成XX.tar.gz.(提示:用ls,grep,find等命令,文件一般指普通文件)
  1. find ~ -type f -size -5k -exec tar -czPf xx.tar.gz {} +
复制代码
3.写一个程序,可以将/et/passwd的第一列取出,而且每一列都以一行字符串“the 1 account is “root””来显示
  1. awk -F: '{print "the 1 account is \042"$1"\042"}' /etc/passwd  
复制代码
4.编写一个程序,他的作用是先查看一下/root/test/logical这个名称是否存在,若不存在,则创建一个文件。使用touch来创建,创建完成后离开;如果存在的话,判断该名称是否为文件,若为文件则将之删除后新建一个目录。文件名为loglical,之后离开;如果存在的话,而且该名称为目录,则删除此目录。
  1.         #!/bin/bash
  2.         file=/root/test/logical
  3.         [ -d $file ] && rm -rf $file && exit 1
  4.         [ -f $file ] && rm -f $file && mkdir loglical && exit 2
  5.         touch $file && exit 3
复制代码
5.编写一个shell脚本,从键盘读入10个数,显示最大值和最小值。
  1.     awk 'BEGIN{printf "pls input num: ";getline a <"/dev/tty";n=split(a,b);for(;i++<n;){if(i==1)min=max=b[1];if(b[i]>max)max=b[i];if(b[i]<min)min=b[i]};print "max: "max,"min: "min}'
复制代码
6.编写一个脚本,打印任何数的乘法表。如输入3则打印
  1*1=1
  2*1=2 2*2=4
  3*1=3 3*2=6 3*3=9
  1.   awk 'BEGIN{printf "input num: ";getline a <"/dev/tty";for(n=1;n<=a;n++){for(i=1;i<=n;i++)printf i"*"n"="i*n" ";print}}'
复制代码
7.编写一个脚本,输入自己的生日时间(YYYYMMDD),计算还有多少天多少个小时是自己的生日。

  1. cat xx.sh
  2. #!/bin/bash
  3. awk '{print int($0/86400)"天"int($0%86400/3600)"小时"int($0%86400%3600/60)"分钟"}' <<<$[$(date -d "`date +%Y`${1:4}" +%s)-`date +%s`]
  4. #使用方法
  5. xx.sh 19450904
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
14 [报告]
发表于 2014-04-10 23:56 |只看该作者
第一题:
  1. mkdir /home/a{1..100}
复制代码
第二题:
  1. find ~ -type f -size -5k -exec tar Pczvf XX.tar.gz {} +
复制代码
第三题:
  1. awk -F: '{printf "the %d account is \"%s\"\n",NR,$1}' /etc/passwd
复制代码
第四题:
  1. #!/bin/bash
  2. file=/root/test/logical
  3. if [ -f $file ]; then
  4.         rm -f $file && mkdir $file
  5. elif [ -d $file ]; then
  6.         rm -rf $file
  7. else
  8.         mkdir -p ${file%/*} && touch $file
  9. fi
复制代码
第五题:
  1. #!/bin/bash
  2. read -p 'Please enter 10 numbers: ' numbers
  3. awk '{max=min=$1;for(i=1;i++<NF;){if($i>max)max=$i;if($i<min)min=$i}printf "max: %d, min: %d\n",max,min}' <<< $numbers
复制代码
第六题:
  1. awk -vx=3 'BEGIN{for(i=0;i++<x;)for(j=0;j++<i;){printf "%d*%d=%d",i,j,i*j;printf i==j?"\n":" "}}'
复制代码
第七题:
  1. awk -vb=20140501 'BEGIN{"date +%s -d "b | getline t;d=t-systime();printf "After %d days and %d hours is birthday.\n",+d/86400,+d%86400/3600}'
复制代码

论坛徽章:
0
15 [报告]
发表于 2014-04-11 08:45 |只看该作者
谢谢各位高手的指点,本人在这里受教了,如有不同的代码,请粘贴贴子,本人在这里受教。

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
16 [报告]
发表于 2014-04-11 09:15 |只看该作者
@关阴月飞@yestreenstars大大们快收我为徒吧。。。

论坛徽章:
36
摩羯座
日期:2013-09-23 16:37:312015年亚洲杯之沙特阿拉伯
日期:2015-04-14 09:10:172015亚冠之柏太阳神
日期:2015-06-25 08:48:212015亚冠之武里南联
日期:2015-07-28 09:01:082015亚冠之莱赫维亚
日期:2015-07-28 15:44:172015亚冠之柏斯波利斯
日期:2015-09-06 14:08:52白银圣斗士
日期:2015-11-25 17:06:2815-16赛季CBA联赛之吉林
日期:2015-12-09 16:59:072016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之辽宁
日期:2016-04-14 09:29:04luobin
日期:2016-06-17 17:46:3615-16赛季CBA联赛之天津
日期:2016-08-16 14:11:01
17 [报告]
发表于 2014-04-11 09:21 |只看该作者
第六题
  1. #!/bin/bash
  2. read -p "the number: " c
  3. case $c in
  4. [1-9])
  5. awk -vb=$c 'BEGIN{for(i=0;i++<b;){for(a=0;a++<i;) printf i"*"a"="i*a" ";print ""}}'
  6. ;;
  7. *) echo "***error***"
  8. ;;
  9. esac
复制代码

论坛徽章:
0
18 [报告]
发表于 2014-04-11 10:51 |只看该作者
本帖最后由 gxyyq 于 2014-04-11 10:52 编辑

大家的帖子真让我初学者受用,看了、操作了半个月的命令,还不如实现几个小小实例,收获特多!
我的代码跟高手们比起来,我的代码还需要精简,谢谢这个平台,我还需要努力!
谢谢大家!

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
19 [报告]
发表于 2014-04-11 13:20 |只看该作者
回复 4# huang6894


    给大神跪了,膜拜

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
20 [报告]
发表于 2014-04-11 14:15 |只看该作者
回复 19# 这个冬天不冷


    冬天大神你也来啦?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP