关于shell脚本编程基础第三篇

                      关于shell脚本编程基础第三篇

 

本章主要内容:
循环的特殊用法;while;for;select 循环与菜单

                             
特殊用法:
while循环的特殊用法(遍历文件每一行)
语法:
  while read (读取) (列表);do    
       循环体
  done <
/文件/file
  依次读取导入的文件中的每一行,并且将行赋值给变量列表中
=================================================

命令行举例:
[root@localhost ~]# while read suru;do
echo $suru;done </etc/issue
S
Kernel r on an m
将/etc/issue中的内容按行读取到变量列表中

=================================================

shell脚本举例:
[root@localhost ~]# vim whileUID.sh
#!/bin/bash
#
#user:Compro
#将/etc/passwd
中的所有UID进行相加之和
sum=0
while read line
do
        sum=$[sum+`echo $line|cut -d: -f3`]
done < /etc/passwd
echo
$sum

运行结果:
[root@localhost
~]# bash whileUID.sh
85210
调试执行:
[root@localhost ~]#
bash -x whileUID.sh
会显示出来详细的执行状态。
===============================================================================

命令行举例:
~]# while read -p
"who are you?" suru;do echo $suru;done
循环  直接打印提示
who are you?  调用输入的内容显示。死循环
运行结果
who are you?xiaomage
xiaomage
who are you?xmg
xmg

就这样一直循环下去。
=================================================================================

shell脚本练习
[root@localhost
~]# vim whileuserxin.sh
#!/bin/bash
#
#user:Compro
#扫描/etc/passwd恩件每一行,如果发现注释信息字段为空,则填充用户名和办公室号码。>并提示该用户的注释信息已经修改成功
while read line
do
        xinxi=$(echo $line | cut -d: -f5)
        if [[ -z "$xinxi" ]];then
        name=$(echo $line |cut -d: -f1)

        chfn -f $name $name &> /dev/null
        chfn -p 38763415 $name &> /dev/null
        echo "$name xinxi modify complete "
        fi
done <
/etc/passwd

#用法:
chfn [选项] [用户名]
选项:
 -f, –full-name
<全名>       真实姓名
 -o, –office
<办公>          办公号码
 -p, –office-phone
<电话>   办公电话
 -h, –home-phone <电话>    
住宅电话

=================================================================================

特殊用法(())
双小括号方法,就是((…))格式,也可以用于算数运算
(( … )): (( 表达式 ))
   
估值算术表达式。
    表达式按照算术法则进行估值。
    等价于 "let 表达式".   
   
退出状态
    如果表达式估值为0则返回 1;否则返回0。
例如:~]# i=10;((i++));echo $i
      ~]# i=10;let i++;echo $i
双小括号方法也可以使用bash shell实现C语言风格的变量操作

for循环的特殊格式:
for ((控制变量初始化;条件判断表达式;控制变量的修正表达式))
do
    循环体
done
控制变量初始化:仅在运行到循环代码段时执行一次
控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后在做条件判断
=================================================================================

简单shell脚本举例:
for
((i=1;i<10;i++))   定义变量=1  然后判断i是否小于10;如果不小于10,就执行打印变量值;
do                    
然后递增运算i++在前面的基础上加1,循环到条件为假时,退出循环,
  echo
$i            如果条件到达9的时候就会终止,条件是i小于10,你能超过10
done                   循环结束退出

关于shell脚本编程基础第三篇=================================================================================

shell脚本练习
[root@localhost
~]# vim for992.sh
#!/bin/bash
#
#user:Compro
for (( i=1 ; i<=9 ; i++ ))          这个就不解释了
看上面的解释就行了;
do
       
for (( j=1 ; j<=i ; j++))   嵌套for循环,定义运算变量值,j=1 j小于等于$i的值, 
然后在j的值基础之上进行递增运算。
       
do                         
当循环到小于等于i的时候就停止了,也就是说i是9行,j在9行的基础上,每一行进行对应打印,比如1行打印1次,2行打印2次,以此类推;直到循环结束
                echo -ne "$i*$j=$(($i*$j))\t"      
        done                       
$i的值*$j的值(1*1;2*1;2*2)=  拿$i的值和$j的值进行乘法运算的结果
       
echo                        例如1*1=1 ;2*1=2;2*2=4  然后每一个结果之后加上\t空格
done                                循环体结束
运行结果:
[root@localhost ~]#
bash for992.sh
1*1=1 
2*1=2 2*2=4 
3*1=3 3*2=6 3*3=9 
4*1=4 4*2=8 4*3=12 4*4=16 
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 
=================================================================================

select 循环与菜单
    
select: NAME [in 词语 … ;] do 命令; done
   
从列表中选取词并且执行命令。
select
循环主要用于创建菜单,按数字顺序排列的菜单选项,将显示在标准错误上,并显示PS3提示符,等待用户输入   
用户输入菜单列表中的某个数字 ,执行相应的命令,
语法:
select 变量 in 列表
    do
      循环体命令
     done     

命令行举例:
~]# select caidan in
kr gbjd lm;do echo "you is $caidan";done
无限循环命令
变量名   列表1,2,3来表示位置 ;提示输入变量的值;结束
~]# select cmd in
ls pwd hostname exit;do $cmd;done
可以定义变量名, 列表内是命令
对应的输如数字就可以执行相应的命令结果
=================================================================================

shell脚本举例:
PS3="提示符内容"
[root@localhost
~]# vim selectcaidan.sh
#!/bin/bash
#
#user:Compro
#利用select循环创建菜单变量
PS3="请输入:"
a=拍黄瓜
b=韭菜鸡蛋
c=兰州拉面
select caidan in $a $b $c
do
case $caidan in
        $a)
               
echo "price is 66 Dollar"
                ;;
        $b)
               
echo "price is 69 Dollar"
                ;;
        $c)
               
echo "price is 99 Dollar"
                ;;
         *)
               
echo "you choose is false"
                break
                ;;
                esac
done

=================================================================================

执行shell脚本:
~]# bash selectcaidan.sh
1) 拍黄瓜
2) 韭菜鸡蛋
3) 兰州拉面
请输入:1
price is 66 Dollar
请输入:2
price is 69 Dollar
请输入:3
price is 99 Dollar
请输入:4
you choose is false
=================================================================================

用户输入被保存在内置变量
REPLY(回复) 中 ;会提示用户输入的是什么字符
[root@localhost ~]# vim
selectcaidan.sh
#!/bin/bash
#
#user:Compro
#利用select循环创建菜单变量
PS3="请输入:"
a=拍黄瓜
b=韭菜鸡蛋
c=兰州拉面
select caidan in $a $b $c
do
case $caidan in
        $a)
               
echo "price is 66 Dollar"
                echo "you
input is $REPLY"      你输入的是$
                ;;
        $b)
               
echo "price is 69 Dollar"
                echo "you
input is $REPLY"    
                ;;
        $c)
               
echo "price is 99 Dollar"
                echo "you
input is $REPLY"
                ;;
         *)
               
echo "you choose is false"
                echo "you
input is $REPLY"
               
break                           退出当前的整个循环。
                ;;
                esac
done

select
是个无限循环,因此要记住用break命令退出循环,或用exit命令终止脚本。也可以按Ctrl+c退出本次循环
注意:退出循环,和终止脚本是两个概念。
select经常和case联合使用
,与for循环类似,可以省略in后面的变量列表,此时可以使用位置变量

 

 

 

 

 

 

原创文章,作者:小马哥,如若转载,请注明出处:http://www.178linux.com/37822

(0)
小马哥小马哥
上一篇 2016-08-21
下一篇 2016-08-21

相关推荐

  • Dell R720 安装debian系统编译网卡驱动

    最近比较忙,视频也没怎么看,下面是之前工作中遇到的问题,事后做的记录,中间解决过程参考了网上的相关资料,现在一并贴出来。 需求:Dell R720 安装debian系统 环境 硬件:Dell R720  软件:系统有debian 7.0.0和debian 6.0.10 1. debian 7.0.0 : 集成了DELL PCRE H710 Mini…

    Linux干货 2015-08-04
  • 基于Cobbler实现多版本操作系统自动部署

    前言     在生产环境中,当需要批量部署几十甚至上百台服务器时,实现自动化安装操作系统尤为重要,按照传统的光盘引导安装是不可想象的;此前我们通过pxe+kickstart简单实现了自动化安装,但只能实现单一版本安装,当需要部署不同版本或不同引导模式(BIOS、EFI)时,此种方式就不够灵活。而Cobbler正是为了解…

    Linux干货 2015-08-11
  • 深入理解php底层:php生命周期

    1、PHP的运行模式:     PHP两种运行模式是WEB模式、CLI模式。无论哪种模式,PHP工作原理都是一样的,作为一种SAPI运行。 1、当我们在终端敲入php这个命令的时候,它使用的是CLI。 它就像一个web服务器一样来支持php完成这个请求,请求完成后再重新把控制权交给终端。 2、当使用Apache或者别web服务器…

    系统运维 2015-05-28
  • vim编辑器的使用

    vim          vim是一个类似于vi的文本编辑器,不过在vi的基础上增加了很多功能,在早起vim和Emacs编辑器打的很火热,在1999年被linuxwork文本编辑分类的优胜者,而vim屈居第二,但2000年vim赢得了salashdot beanie的最佳开放源代…

    系统运维 2016-08-09
  • 四大开源协议比较:BSD、Apache、GPL、LGPL

          现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种。我们现在常见的开源协议如BSD, GPL, LGPL,MIT等都是OSI批准的协议。如果要开源自己的代码,最好也是选择这些被批准的开源协议。   这里我们来看四种最常用的开源协议及它们的适用范围,供那些准备开…

    系统运维 2016-08-15
  • Linux的文件系统架构基础

    前言     当今计算机操作系统来说常见功能主要有:进程调度、内存管理、文件系统管理、网络协议栈支持、驱动程序管理、安全功能等。所有对于我们来讲学习Linux文件系统也是一个十分重要的知识,也是学习Linux的必备基础知识,学习好Linux的文件系统知识也是为接下来学习Linux的其他知识奠定良好的基础 关键词  &n…

    Linux干货 2015-04-16

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-22 13:34

    文章对shell语句的语法总结的很好,这道华丽的分割线也是很6,可以尝试着用markdown来写,这样会让整个文章看起来好看多了。