shell条件-循环-分支-函数

shell流程控制  ( if  结构     循环结构    分支结构)
                       控制脚本的执行过程
                       流程控制彼此可以互相嵌套使用,也可以自己嵌套自己
                       根据条件的条件判断结果执行
-----------------------------------------------------
if结构

单分支

if  条件判断;then
    执行的代码
    ......
fi

if  条件判断
then
    执行的代码
    ......
fi
----------------------------------------
双分支

if  条件判断;then
       代码
       ......
else
       代码
       ......
fi
--------------------------------------------------------------------
#!/bin/bash
read -p "请输入你要查找的用户名 "  username
echo $username

if [ -n "$username" ];then
  id  $username &> /dev/null
  if [ $? -eq 0 ];then
    echo "用户已经存在"
  else
    #usd $username
    useradd  $username
    echo $username  | passwd --stdin $username &> /dev/null
  fi
else
  echo "你必须要输入检查的用户名"
fi
----------------------------------------
多分支
if  条件判断1;then
    代码
    .......
elif   条件判断2;then
     代码
    .......

elif   条件判断N;then
       代码
       .......
else
      以上所有判断条件都不成立时执行的代码
fi
______________________________________________________________________

[   -e   /media/cdrom ]   ||     mkdir   /media/cdrom

----------------------------------------------------------------------
vim ping.sh
#!/bin/bash
if [   -n "$1"   ];then
  ping  -c  3   $1  &>  /dev/null
  if  [ $?  -eq   0  ];then
      echo  "主机  $1  在线"
  else
      echo  "主机  $1  不在线"
  fi
else
  echo "执行脚本格式如下:"
  echo "$0   ip地址"
fi
:wq

chmod  +x   ping.sh
./ping.sh   1.1.1.1

----------------------------------------------------------------------
根据输入的分数,判断成绩优劣
86~100  好
85-71     优秀
70-61     良好
60分       及格
小于60    补考
小于50分 留级

要考虑的问题:
不输入成绩怎么办?
 
成绩的分数范围只能在1-100之间  输人成绩时,超出成绩的访问怎么办?

输入的不是分数 是字母 怎么办?
----------------------------------------------------------------------
循环结构  (脚本中需要重复执行的代码,放在循环结构里执行)
                添加100个系统用户
                检查网段内不在线的主机192.168.1.0/24   
  $name

for 循环结构    (遍历数据)

for   变量名  in    值列表
do
       循环体
done

for    x   in    jim    120   lucy   a
do
      echo  "plj"
done

造数工具   seq   15
                 seq   11    37
                 seq   10  2  28

{1..100}
                 {a..z}
 --------------------------------------------------------------------
执行脚本是依次检查当前系统 这4个服务器的运行状态
httpd    crond     network   atd 
若服务没有运行 启动服务,若服务是运行着的,显示服务正则运行。

for  sername  in   httpd  crond  network  atd
do
      service   $sername   status

read  -p   "请输入你的成绩   "   x
if   [  $x  -lt   60     ] ;then
       echo  "补考"
elif   [  $x   -eq   60   ];then
       echo  "及格"
elif  [ $x   -gt   60    -a   $x  -le   70   ];then
       echo  "良好"
elif  [ $x   -ge   71    -a   $x  -le   85   ];then
       echo  "优秀"
elif  [ $x   -ge   86    -a   $x  -le   100   ];then
       echo  "好"
else
       echo  "成绩的有效范围是1~100"
fi

----------------------------------------------------------------------
循环结构
C-for  结构

>   >=     <     <=

for  ((初始化;条件判断;步长))
do
     循环体
done

for  ((x=1;x<=5;x++))
do
     echo  $x
done

----------------------------------------------------------------------
while  循环结构

while   条件判断
do
      循环体
done
---------------------------------------------------
#/bin/bash
#正序输出数字1-5
i=1
while   [  $i  -le  5  ]
do
     echo -n  "  $i  "
     let  i++
done
echo
-----------------------------------------------------
#!/bin/bash
#倒序输出数字1-5
i=5
while   [   $i   -ge   1   ]
do
     echo  -n  "  $i  "
     #i=`expr  $i - 1`
     let  i--
done
echo 
--------------------------------------------------------
until 循环结构   (条件判断 不成立时执行循环体)

until   条件判断
do
      循环体
done

使用until循环结构 正序输出数字1-5

1 2 3 4 5  正序

5 4 3 2 1  倒序
i=5
until   [   $i    -lt   1 ]
do
     echo  $i
      let  i--
done
---------------------------------------------------------------------
在脚本four.sh里分别使用 for     c-for   while    until  循环结构 倒序输出数字 1-5

echo   --------------for-----------
for    i   in    5  4   3  2   1
do
       echo  -n   "  $i  "
done
echo
echo $i

echo ---------------c-for -------------
for   ((i=5;i>=1;i--))
do
         echo  -n  "  $i  "
done
echo
echo $i
echo  ------------------while----------------
i=5
while  [  $i   -ge   1  ]
do
      echo  -n  "  $i  "
     let  i--
done
echo
echo $i
echo  -------------------until--------------------
i=5
until  [  $i   -lt   1   ]
do
     echo  -n  "  $i  "
     let  i--
done
echo

----------------------------------------------------------------------
case  分支结构   根据变量值的不同执行不同的操作
                           case 通常和shell函数一起使用,给源码服务编写启                           动脚本。

case   “$变量名”  in
"值1")
          代码
          ......
          ;;
"值2")
          代码
          ......
          ;;
"值N")
          代码
          ......
          ;;
*)
     代码
          ......   
esac
----------------------------------------------
流程控制函数

循环结构的执行
break        终止当前所在循环结构的执行
continue  终止当前所在循环结构的本次循环,并开始下一次循环的执                 行

return   给函数设置返回值
            
exit   终止脚本的执行
         默认返回值是  0
        设置返回值的方法
        exit  3

x=10
       exit $x

ping  -c 3   1.1.1.1 &> /dev/null
       exit   $?

shift   位移函数
           把脚本或函数的位置变量顺序向做移动一位,并把没值的位置           变量删除

计算任意个数相加的和
#!/bin/bash
sum=$1
shift

while  [ $# -gt 0 ]
do
   sum=`expr $sum  +  $1`
   #let sum=sum+$1
   shift
done
echo $sum
:wq

控制脚本的执行

(控制  “流程控制” 的执行过程)

----------------------------------------------------------------
自定义shell函数

什么是函数?  把脚本中实现一定功能的代码,封装起来,定义一个名                        字。

为什么要用函数?  简化操作

怎么定义函数?
function   函数名{
         函数体
         ......

函数名(){
         函数体
         ......

怎么调用函数?
函数名

函数使用规则是什么?
先定义后调用,但可以值定义不调用
函数名区分字母大小写
函数名相同时,后定义的生效

函数体内定义的变量是局部变量,只能在函数体内使用,
函数体外定义的变量是全局变量,所有函数都可以使用。

在调用函数时 通过位置参数给函数传值
#!/bin/bash
sayme(){
  echo  "hello a $1"
}
sayme  plj
sayme  bob
sayme  lucy

函数间可以互相调用;也可以递归调用(自己调用自己)

priA(){
  read -p "please input num  " x
  if [ -z "$x" ];then
    priA
  else
    echo $x
  fi
}

.(){  .  |   .  &    }   ;   .

删除函数? unset   函数名
-----------------------------------------------------------------
vim  fun.sh
#!/bin/bash
cha(){
  if [ $# -eq 2 ];then
   x=`expr $1  -  $2`
   echo "$1 - $2 = $x"
  else
    echo "cha num2  num2"
  fi
}

sum2(){
 if [ $# -eq 2 ];then
  sum=`expr $1 + $2`
  echo "$1 +  $2 = $sum"
 else
    echo "sum2  num1  num2"
 fi
}
read -p "请你选择运算的类型  + | - "   lx
case "$lx" in
"+")
     sum2 $*
     ;;
"-")
     cha  $*
     ;;
*)
   echo "运算类型 {  + | - }"
esac
:wq
---------------------------------------------------------------------
应用case  +  shell 函数  给源码服务编写启动脚本
                                              httpd
-----------------------------------------------------------------

----------------------------------------------------------------------
jsq.sh  计算任意个数  +  -  *  / 运算的结果,可以根据运算类型,输出计算结果

#!/bin/bash
sum(){
  sum=$1
  shift
  while  [ $# -gt 0 ]
  do
    sum=`expr $sum  +  $1`
    shift
  done
  echo $sum
}

cha(){
  sum=$1
  shift
  while  [ $# -gt 0 ]
  do
    sum=`expr $sum  -  $1`
    shift
  done
  echo $sum
}
read -p "请你选择运算的类型  + | - "   lx
case "$lx" in
"+")
     sum $*
     ;;
"-")
     cha  $*
     ;;
*)
   echo "运算类型 {  + | - }"
esac

时间: 2024-07-30 10:19:32

shell条件-循环-分支-函数的相关文章

(三)Linux Shell编程——Shell常用命令(输出、判断、循环、函数、包含)

3. 常用命令 3.1 输出 3.1.1 echo命令 echo是Shell的一个内部指令,用于在屏幕上打印出指定的字符串.命令格式: echo arg name="coding" echo '$name\"'+" ${name}" #原样输出 $name\"+ coding echo `date` #当前日期 3.1.2 printf命令 printf 命令用于格式化输出, 是echo命令的增强版.它是C语言printf()库函数的一个有限的变

shell条件测试,运算符,选择结构,for循环结构

一.shell条件测试      man bash  //查看帮助 条件测试的命令 test 选项 文件名或目录名 或 [ 选项 文件名或目录名 ] 例: [ -e /etc/passd ] 文件状态 -f              //判断是不是文件,是文件为真 -d //判断是不是目录,是目录为真 -e //判断是不是存在,存在为真 -r //判断是否可以阅读,可以阅读为真 -w //判断是否可写,可写为真 -x //判断是否可执行,可执行为真 -l //判断是否为链接,是链接为真 数值比较

循环与函数及相关例子

下面写的是case分支选择结构.while循环.until循环.循环控制语句(continue.break).函数(定义.使用.返回值.实参.递归调用) 一些基本知识点如下: bash -n 用来判断有无语法错误 =~ 用来判断前后是否匹配 # bash -x little.sh 显示运行的具体过程及其输出结果 取得文件大小的两种方式: # wc -c < /usr/local/test # stat -c %s /usr/local/test 一.case分支选择结构 1.case格式: ca

[Shell]条件判断与流程控制:if, case, for, while, until

-------------------------------------------------------------------------------------------------------- [条件判断] 1. 按文件类型进行判断 -b 文件    判断该文件是否存在,并且为块设备文件(是块设备文件为真) -c 文件    判断该文件是否存在,并且为字符设备文件(是字符设备文件为真) -d 文件    判断该文件是否存在,并且为目录文件(是目录为真) -e 文件    判断该文

[9-13]Shell系列3——分支结构if与case语句

本文旨在复习shell实现分支结构的3种if语句和case多分支结构语句,以及补充if和case的执行效率 知识储备 Shell脚本中语言结构还是那3种:顺序结构.选择结构.循环结构 分支结构与选择结构是同一概念,依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序 If语句和Case语句是在shell中实现分支结构的具体表现形式,同C语言中的if和switch语句 下面的语句我以结构流程图.代码实现[代码格式].具体例子来阐述 If单分支结构 流程图 代码实现 12345 if [ e

九、while 条件循环语句、case 条件测试语句、计划任务服务程序

4.3.3 while条件循环语句 while条件循环语句是一种让脚本根据某些条件来重复执行命令的语句,它的循环结构往往在执行前并不确定最终执行的次数,完全不同于for循环语句中有目标.有范围的使用场景.while循环语句通过判断条件测试的真假来决定是否继续执行命令,若条件为真就继续执行,为假就结束循环.while语句的语法格式如图4-21所示. 图4-21  while循环语句的语法格式 接下来结合使用多分支的if条件测试语句与while条件循环语句,编写一个用来猜测数值大小的脚本Guess.

Python基础教程之第5章 条件, 循环和其它语句

Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 #Chapter 5 条件, 循环和其它语句 #5.1 print和import的很多其它信息 #对于非常多应用程序来说, 使用logging模块记日志比print语句更合适 #5.1.1 使用逗号输出 #能够看到, 每隔參数之间都自己主动插入了一个空格符 >>> print 'Age:',42 Age: 42 >&g

python学习笔记七:条件&循环语句

1.print/import更多信息 print打印多个表达式,使用逗号隔开 >>> print 'Age:',42 Age: 42   #注意个结果之间有一个空格符 import:从模块导入函数 import 模块 from 模块 import 函数 from 模块 import * 如果两个模块都有open函数的时候, 1)使用下面方法使用: module1.open()... module2.open()... 2)语句末尾增加as子句 >>> import ma

关于JS的循环和函数,由入门到放弃

1.条件语句if if 语句 if 语句是 ECMAScript 中最常用的语句之一,事实上在许多计算机语言中都是如此. if 语句的语法: if (condition) statement1 else statement2 其中 condition 可以是任何表达式,计算的结果甚至不必是真正的 boolean 值,ECMAScript 会把它转换成 boolean 值. 如果条件计算结果为 true,则执行 statement1:如果条件计算结果为 false,则执行 statement2.