`

ma系列之-13-for case while

 
阅读更多

 

 

1 for写法:

 

for 变量 in 列表; do
  循环体
done

 

for中列表的出现形式有如下两种:

{1..100} 表示从1到100

`seq 1 2 10` 表示从1开始 间隔2个 到10为止

 

for 写法方式2:

for (( expr1 ; expr2 ; expr3 )); do
  循环体
done

 

 

案例:

1 求1-100的总和

root@chinadaas109 zhoumingtest]# cat fortest.sh 
#!/bin/sh
#
declare -i sum=0
for i in {1..100}; do
  sum=$[$sum+$i]
done

echo "sum is: $sum"


2 依次向/etc/passwd中的每个用户问好

LINES=`wc -l /etc/passwd|cut -d' ' -f1`
for I in `seq 1 $LINES`; do echo "Hello, `head -n $I /etc/passwd | tail -1 | cut -d: -f1`"; done

 

打印1到10之间的奇数
$ cat  test.sh 
#!/bin/bash
#

for i in `seq 1 2 $1`; do
              echo $i
done

result:
$ sh test.sh 10
1
3
5
7
9

 

 

将1-100的奇偶和打印出来:

[root@chinadaas109 zhoumingtest]# cat test.sh 
#!/bin/bash
#
declare -i evensum=0
declare -i oddsum=0

for i in {1..100}; do
  if [ $[$i%2] -eq 0 ]; then
        let evensum+=$i
  else
        let oddsum+=$i
  fi
done

echo "evensum is: $evensum"
echo "oddsum is: $oddsum"

 

打印1-100的和:

#!/bin/bash
#
declare -i sum=0
for((i=1; i<=100; i++)); do
	let sum+=$i
done

echo $sum	

 

 

 

 

 

 2 case语句

 

 语法:

case SWITCH in 
value1)
  statement
  ...
  ;;
value2)
  statement
  ...
  ;;
*)  *表示其余情况下的意思
  statement
  ...
  ;;
esac       是 case反过来写

 

 

使用案例:

根据输入不同的字符 显示不同的结果

#!/bin/bash
#
case $1 in 
[0-9])
  echo "a digit."
  ;;
[a-z])
  echo "Lower."
  ;;
[A-Z])
  echo "Upper."
  ;;
*)
 echo "Special character."
  ;;	
esac

 

只接受参数start,stop,restart,status其中之一:
只接受参数start,stop,restart,status其中之一
#!/bin/bash
#
case $1 in 
'start')
  echo "start server ..."
  ;;
'stop')
  echo "stop server ..."
  ;;
'restart')
  echo "restart server ..."
  ;;
'status')
  echo "status server ..."
  ;;  
*)
 echo "`basename $0` (start|stop|restart|status)"
  ;;	
esac
 
 3 while:
 
适用于循环次数未知的场景,要有退出条件
语法:
 while CONDITION; do
   statement
   ...
 done
 
计算100以内所有正整数的和

#!/bin/bash
declare -i I=1
declare -i SUM=0
while [ $I -le 100 ]; do
  let SUM+=$I
  let I++
done
echo $SUM


练习:转换用户输入的字符为大写,除了quit:
#!/bin/bash
#
read -p "Input something: " STRING

while [ $STRING != 'quit' ]; do
  echo $STRING | tr 'a-z' 'A-Z'
  read -p "Input something: " STRING
done


练习:每隔5秒查看hadoop用户是否登录,如果登录,显示其登录并退出;否则,显示当前时间,并说明hadoop尚未登录:
#!/bin/bash
#
who | grep "hadoop" &> /dev/null
RETVAL=$?

while [ $RETVAL -ne 0 ]; do
  echo "`date`, hadoop is not log." 
  sleep 5
  who | grep "hadoop" &> /dev/null
  RETVAL=$?
done


echo "hadoop is logged in."
 
 while + read  组合使用:
 
1) 显示一个菜单给用户:
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
2) 当用户给定选项后显示相应的内容;
   
扩展:
当用户选择完成,显示相应信息后,不退出;而让用户再一次选择,再次显示相应内容;除了用户使用quit;
#!/bin/bash
#
cat << EOF
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
EOF


read -p "Your choice: " CHOICE
while [ $CHOICE != 'quit' ];do
  case $CHOICE in
  d|D)
    echo "Disk usage: "
    df -Ph ;;
  m|M)
    echo "Memory usage: "
    free -m | grep "Mem" ;;
  s|S)
    echo "Swap usage: "
    free -m | grep "Swap" ;;
  *)
    echo "Unknown.." ;;
  esac


read -p "Again, your choice: " CHOICE
done
 
 
 
 
 
分享到:
评论

相关推荐

    学习Java的一些Demo源码

    - **控制结构**:如if-else语句、for、while、do-while循环以及switch-case结构,这些在"JAVA YUANMA"中可能有大量应用,用于解决各种逻辑问题。 - **异常处理**:Java的try-catch-finally语句用于处理程序运行时...

    yuanma1.zip

    1. **基础语法**:C++ 的基础语法与C语言相似,包括变量声明、控制流结构(如if-else、switch-case、for、while循环)、函数定义和调用等。学习C++,首先需要掌握这些基本概念,以便编写简单的程序。 2. **内存管理...

    c代码-ce shi dai ma

    - **控制结构**:如条件语句(if-else)、循环语句(for, while, do-while)和开关语句(switch-case)。 - **函数**:C语言中的函数是可重用的代码块,可以接受输入参数并返回值。 3. **C语言输入输出**: 使用...

    C++2010入门实例源码

    3. **控制结构**:C++的流程控制包括条件语句(if-else, switch-case)和循环语句(for, while, do-while)。这些结构在处理逻辑和迭代时非常关键,实例中会有相应的运用。 4. **函数**:函数是C++组织代码的基本...

    #include

    while(EOF!=fscanf(file,"%*[^\n]\n")) length++;//自动计算考生数罝ATA* data=(DATA*)malloc(length*sizeof(DATA)); int* pai=(int*)malloc(length*sizeof(int)); rewind(file); for(i=0;i;i++) {fscanf(file,...

    最新PCSC CCID 测试源码

    while (rContext-&gt;hLockId != 0) (void)SYS_USleep(PCSCLITE_LOCK_POLL_RATE); Log1(PCSC_LOG_INFO, "Lock released"); } /******************************************* * * This section tries to ...

    tm1680参考程序

    #define PWM13 0xBC #define PWM14 0xBD #define PWM15 0xBE #define PWM16 0xBF /******命令宏定义******/ /***端口定义***/ sbit SDA=P1^4; //TM1680通讯端口设置 sbit SCL=P1^5; sbit MA1=P1^6; sbit MA0=P1^7;...

    android坦克大战原码

     可以用 case MotionEvent.ACTION_MOVE: 代替 case 2: ,显然前者阅读性优于后者。  因笔者还没有android常量大全资料,只好暂时直接地使用常量值。若那位读者愿提供 Android常量大全资料,非常欢迎发到笔者的...

    visual basic 6.0模拟试题

    根据提供的文件信息,我们可以归纳出一系列与Visual Basic 6.0相关的知识点,这些知识点主要涉及基本语法、控制结构、变量处理、数组操作以及界面元素等关键方面。 ### 知识点1:运算符与表达式 - **选择题1**:...

    2021-S-DS-HW6

    4. **控制流程**:C语言提供了多种控制流程工具,如顺序控制(按代码行的顺序执行)、选择控制(if-else,switch-case)和循环控制(while、for)。 5. **输入/输出操作**:C语言使用标准库函数如`printf`进行输出...

    C语言上机考试试卷

    1. 循环结构:for、while、do-while循环的使用,以及如何控制循环的终止条件。 2. 条件语句:if-else、switch-case的运用,理解各种比较运算符。 3. 数组:声明、初始化、访问数组元素,理解数组下标从0开始。 4. ...

    MATLAB语言讲义第04章MATLAB程序设计共50页

    2. **控制结构(Control Structures)**:包括条件语句(如if-else,switch-case)和循环(如for,while)。这些结构允许程序员根据条件执行不同的代码块或重复执行某些操作。 3. **数组与矩阵操作(Array and ...

Global site tag (gtag.js) - Google Analytics