第十六周-day68—Shell编程day05

第十六周-day68-shell编程day05

1.for循环语句

随机生成数字的一种方法

练习



1.for循环在/root下创建10个html文件,其中每个文件需要包含10个随机小写字母和数字,加固定字符串oldchang。名称示例如:apns1yrmk_oldchang.html。
[root@shell day05]# cat for1.sh 
#!/bin/bash
suffix="_oldchang.html"
for ((i=0; i<=10 ; i++)) ;do
   touch /server/scripts/day05/file/`date +%N|md5sum|cut -c 1-10`$suffix
done
[root@shell day05]# sh for1.sh 
[root@shell day05]# ll file/
total 0
-rw-r--r-- 1 root root 0 Jul 20 16:31 06d7415c18_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:31 22b6007222_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:31 232d120f98_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:31 24eb9ca27b_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:31 2dfb5d3996_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:31 6e92c961d6_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:31 9d73e8c661_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:31 9ee2ff767a_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:31 a94de61b66_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:31 ba09e7529c_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:31 dbd4cadf0c_oldchang.html
2.使用for循环,将上面文件名中的oldchang改为oldduan,并将扩展名全部大写
[root@shell day05]# cat for2.sh 
#!/bin/bash
for file in `ls file/`;do 
   mv $file ${file/oldchang.html/oldduan.HTML} &>/dev/null
done
[root@shell day05]# ll file/
total 0
-rw-r--r-- 1 root root 0 Jul 20 16:38 0cc1a6f122_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:38 0fcfd82665_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:38 2926da6325_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:38 35983a7e16_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:38 570c22fd5c_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:38 5b9c3e9607_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:38 5f101577d3_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:38 93c3445bff_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:38 c2bc523968_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:38 e148e11a25_oldchang.html
-rw-r--r-- 1 root root 0 Jul 20 16:38 fa9c74b056_oldchang.html

其他方法思路

3、使用for循环和if,筛选出以下单词中字符数大于等于6的单词:I am teacher oldchang and I like eating and sleeping

[root@shell day05]# cat for-ip.sh 
#!/bin/bash
for ((i=1;i<255;i++));do
    
    ping -c 1 -w 1 10.0.0.$i &>/dev/null
    if [ $? -eq 0 ];then
         echo "10.0.0.$i 可以ping通!"
     else
         echo "10.0.0.$i 不可以ping通!"
     fi
 done
 wait
[root@shell day05]# sh for-ip.sh 
10.0.0.1 可以ping通!
10.0.0.21 可以ping通!
^Z
[4]+  Stopped                 sh for-ip.sh
4、for循环打印99乘法表
[root@shell lianxi]# cat for99-1.sh 
#!/bin/bash
#倒三角排序
for ((i=9  ;i>=1;i--));do
   for ((j=1;j<=i;j++));do
       echo -en "${j}x$i=$(($i*$j))\t"    #第一种方法计算
   done
   echo
done
#正三角排序
for ((i=1;i<=9;i++));do
   for ((j=1;j<=i;j++));do
       echo -en "${j}x$i=`expr $i*$j|bc`\t"   #第二种方法计算
   done
   echo                                            
done
[root@shell lianxi]# sh for99-1.sh
1x9=9  2x9=18  3x9=27  4x9=36  5x9=45  6x9=54  7x9=63  8x9=72  9x9=81  
1x8=8  2x8=16  3x8=24  4x8=32  5x8=40  6x8=48  7x8=56  8x8=64  
1x7=7  2x7=14  3x7=21  4x7=28  5x7=35  6x7=42  7x7=49  
1x6=6  2x6=12  3x6=18  4x6=24  5x6=30  6x6=36  
1x5=5  2x5=10  3x5=15  4x5=20  5x5=25  
1x4=4  2x4=8   3x4=12  4x4=16  
1x3=3  2x3=6   3x3=9   
1x2=2  2x2=4   
1x1=1  
1x1=1  
1x2=2  2x2=4   
1x3=3  2x3=6   3x3=9   
1x4=4  2x4=8   3x4=12  4x4=16  
1x5=5  2x5=10  3x5=15  4x5=20  5x5=25  
1x6=6  2x6=12  3x6=18  4x6=24  5x6=30  6x6=36  
1x7=7  2x7=14  3x7=21  4x7=28  5x7=35  6x7=42  7x7=49  
1x8=8  2x8=16  3x8=24  4x8=32  5x8=40  6x8=48  7x8=56  8x8=64  
1x9=9  2x9=18  3x9=27  4x9=36  5x9=45  6x9=54  7x9=63  8x9=72  9x9=81  

5.给出一个网段,如10.0.0.0/24,如何判断网段内的所有ip是否能联通

[root@shell day05]# cat for-ip.sh 
#!/bin/bash
##############################################################
# File Name: for_ip.sh
# Version: V1.0
# Author: lcx
# Organization: www.oldboyedu.com
##############################################################
#for i in 10.0.0.{1..254}
#do
#    ping -c 2 -w 2 $i &>/dev/null
#    if [ $? -eq 0 ];then
#        echo $i 可以ping通! 
#    else
#        echo $i 不可以ping通  &>/dev/null
#    fi
#done
for ((i=1;i<255;i++));do
    
    ping -c 1 -w 1 10.0.0.$i &>/dev/null
    if [ $? -eq 0 ];then
         echo "10.0.0.$i 可以ping通!"
     else
         echo "10.0.0.$i 不可以ping通!"
     fi
 done
 wait
[root@shell day05]# sh for-ip.sh 
10.0.0.1 可以ping通!
10.0.0.21 可以ping通!
^Z
[4]+  Stopped                 sh for-ip.sh

2.循环的流程控制

break、continue、exit、return

2.1 break

[root@shell day05]# vim break.sh
  1 #!/bin/bash
  2 ##############################################################
  3 # File Name: break.sh
  4 # Version: V1.0
  5 # Author: lcx
  6 # Organization: www.oldboyedu.com
  7 ##############################################################
  8 for ((i=0;i<10;i++));do
  9     echo $i
 10     if [ $i -eq 3 ];then
 11         break                                                                         
 12     fi
 13 done
[root@shell day05]# sh break.sh
0
1
2
3

2.2 contunue

[root@shell day05]# cat break.sh 
#!/bin/bash
##############################################################
# File Name: break.sh
# Version: V1.0
# Author: lcx
# Organization: www.oldboyedu.com
##############################################################
for ((i=0;i<10;i++));do
    echo $i
    if [ $i -eq 3 ];then
        continue
    fi
done
echo "hello"
[root@shell day05]# sh break.sh 
0
1
2
3
4
5
6
7
8
9
hello

流程控制的测试脚本

[root@shell day05]# vim for-bcer.sh
#!/bin/bash
##############################################################
# File Name: for-bcer.sh
# Version: V1.0
# Author: lcx
# Organization: www.oldboyedu.com
#############################################################
#循环流程控制break、continue、exit、return的区别和对比
if [ $# -ne 1 ];then
    # 如果传参个数部位1,则打印下面的使用提示,提示四个命令作为参数
    echo $"usage:$0 {break|continue|exit|return}"
    exit 1  #退出脚本
fi
function test(){
    for((i=0;i<5;i++));do
        if [ $i -eq 3 ];then
            $*; #"$*" 就是接收函数以外的参数,是{break|continue|exit|return}其中一个
        fi  
        echo $i
    done
    echo "I am in func." #函数内循环外的输出提示
}
test $* # 这里的$*为参数的传参
func_ret=$? # 接收并测试函数返回值
if [ `echo $*|grep return|wc -l` -eq 1 ];then # 如果传参中含有return
    echo "return exit status: $func_ret" # 则提示return退出的状态码
fi
echo "OK" 

执行结果

[root@shell day05]# sh for-bcer.sh
usage:for-bcer.sh {break|continue|exit|return}
[root@shell day05]# sh for-bcer.sh break
0
1
2
I am in func.
OK
[root@shell day05]# sh for-bcer.sh continue
0
1
2
4
I am in func.
OK
[root@shell day05]# sh for-bcer.sh exit
0
1
2
[root@shell day05]# sh for-bcer.sh return
0
1
2
return exit status: 0
OK

3. 数组

普通数组:只能使用整数作为索引
关联数组:可以只用字符串作为数组索引

3.1 普通数组

[root@shell day05]# oldboy[2]=lcx
[root@shell day05]# oldboy[3]=gyj
[root@shell day05]# oldboy[4]=wx
[root@shell day05]# declare -a  #查看数组
[root@shell day05]# echo $oldboy
ljg
[root@shell day05]# echo ${oldboy[3]}
gyj
[root@shell day05]# echo ${oldboy[4]}
wx
[root@shell day05]# echo ${oldboy[@]}   #"@"和"*"相同
ljg wd lcx gyj wx gds lfx hyj rh
[root@shell day05]# echo ${oldboy[*]}
ljg wd lcx gyj wx gds lfx hyj rh
[root@shell day05]# echo ${!oldboy[*]}  #查看数组所有的索引下标
0 1 2 3 4 5 6 7 8
[root@shell day05]# echo ${#oldboy[*]}  #查看数组元素个数
8
[root@shell day05]# oldboy=(ljg wd lcx gyj wx gds lfx hyj rh)   #数组的批量赋值
[root@shell day05]# echo ${oldboy[*]}
ljg wd lcx gyj wx gds lfx hyj rh

3.2 删除数组

[root@shell day05]# unset oldboy
[root@shell day05]# echo ${oldboy[@]}
[root@shell day05]# declare -a oldboy   #定义空数组
[root@shell day05]# declare -a
declare -a BASH_ARGC='()'
declare -a BASH_ARGV='()'
declare -a BASH_LINENO='()'
declare -ar BASH_REMATCH='()'
declare -a BASH_SOURCE='()'
declare -ar BASH_VERSINFO='([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")'
declare -a DIRSTACK='()'
declare -a FUNCNAME='()'
declare -a GROUPS='()'
declare -a PIPESTATUS='([0]="0")'
declare -a oldboy='()'  #定义成功的数组

3.3 关联数组

declare -A  #查看关联数组

查看关联数组方式和查看普通数组方式相同

练习题

1、学员信息系统,包括输入学员姓名,年龄,性别,输入指定个数之后,就可以进行查询

image.png
[root@shell day05]# cat shuzu.sh
#!/bin/bash
##############################################################
# File Name: shuzu.sh
# Version: V1.0
# Author: lcx
# Organization: www.oldboyedu.com
##############################################################
export LANG="zh_CH.UTF-8"
declare -a name
declare -a age
declare -a sex
for ((i=0;i<5;i++));do
cat << EOF
============== 学生信息录入 ===============
EOF
    read -p "请输入学生的姓名:" n
    read -p "请输入学生的年龄:" a
    read -p "请输入学生的性别:" s

    name[$i]=$n
    age[$i]=$a
    sex[$i]=$s
done

while true ;do
cat << EOF
============== 学生信息录入 ===============
EOF
read -p "请输入学生的id:[exit退出]" id
if [ $id -ge 0 -a $id -le 4 ];then

    echo "学生的姓名是:${name[$id]}"
    echo "学生的年龄是:${age[$id]}"
    echo "学生的性别是:${sex[$id]}"
elif [ "$id" = "exit" ];then
    exit
else
    echo "请输入正确内容![0-4]"
fi
done
============== 学生信息录入 ===============
请输入学生的id:[exit退出]1
学生的姓名是:王达
学生的年龄是:20
学生的性别是:男
============== 学生信息录入 ===============
请输入学生的id:[exit退出]0
学生的姓名是:书¢菊贵
学生的年龄是:30
学生的性别是:男
============== 学生信息录入 ===============
请输入学生的id:[exit退出]2
学生的姓名是:李晨星
学生的年龄是:22
学生的性别是:男
============== 学生信息录入 ===============
请输入学生的id:[exit退出]3
学生的姓名是:脨胡胡玉甲
学生的年龄是:25
学生的性别是:女
============== 学生信息录入 ===============
请输入学生的id:[exit退出]4
学生的姓名是:郭永杰
学生的年龄是:30
学生的性别是:男
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容