循环与分支

1. 循环

for循环
for arg in [list]  这是一个基本的循环结构. 它与C语言中的for循环结构有很大的不同.
for arg in [list]
do
command(s)...
done

for arg in "$var1" "$var2" "$var3" ... "$varN" 在[list]中的参数加上双引号是为了阻止单词分割.

list中的参数允许包含通配符. 如果do和for想在同一行中出现, 那么在它们之间需要添加一个分号.

for planet in Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto
doecho $planet  # 每个行星都被单独打印在一行上.
donefor planet in "Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto"   
doecho $planet #所有的行星名称都打印在同一行上.# 整个'list'都被双引号封成了一个变量.
done

每个[list]中的元素都可能包含多个参数. 在处理参数组时, 这是非常有用的. 在这种情况下, 使用set命令(参见 例子 11-15)来强制解析每个[list]中的元素, 并且将每个解析出来的部分都分配到一个位置参数中.

#!/bin/bash
# 用行星距太阳的距离来分配行星的名字.
 for planet in "Mercury 36" "Venus 67" "Earth 93" "Mars 142"  "Jupiter 483"
do
 set -- $planet # 解析变量"planet"并且设置位置参数.  "--" 将防止$planet为空, 或者是以一个破折号开头.
   # 可能需要保存原始的位置参数, 因为它们被覆盖了.# 一种方法就是使用数组.
  # original_params=("$@")
echo "$1 $2,000,000 miles from the sun"  #-------two tabs---把后边的0和2连接起来
done

可以将一个变量放在for循环的[list]位置上.

FILES="/usr/sbin/accept
/usr/sbin/pwck
/usr/sbin/chroot
/usr/bin/fakefile
/sbin/badblocks
/sbin/ypbind" # 这是你所关心的文件列表.for file in $FILESdoif [ ! -e "$file" ] # 检查文件是否存在.thenecho "$file does not exist."; echocontinue # 继续下一个.fils -l $file | awk '{ print $9 " file size: " $5 }' # 打印两个域.whatis `basename $file` # 文件信息. 注意whatis数据库需要提前建立好.
done                   

如果在for循环的[list]中有通配符 (*和?), 那么将会发生通配(globbing), 也就是文件名扩展.

 for file in [jx]*
 do
  rm -f $file # 只删除当前目录下以"j"或"x"开头的文件.
  echo "Removed file \"$file\"".
 done

在一个for循环中忽略in [list]部分的话, 将会使循环操作$@ -- 从命令行传递给脚本的位置参数. 一个非常好的例子

for a
doecho -n "$a "  # 省略'in list'部分, 因此循环将会操作'$@'(包括空白的命令行参数列表)
done
也可以使用命令替换 来产生for循环的[list].
NUMBERS="9 7 3 8 37.53"
for number in `echo $NUMBERS`
for word in $( strings "$2" | grep "$1" )
列出系统上的所有用户
PASSWORD_FILE=/etc/passwd
for name in $(awk 'BEGIN{FS=":"}{print $1}' < "$PASSWORD_FILE" )
在目录的所有文件中查找源字串
directory=/usr/bin/ ; fstring="Free Software Foundation" # 查看哪个文件中包含FSF.
for file in $( find $directory -type f -name '*' | sort )
do
  strings -f $file | grep "$fstring" | sed -e "s%$directory%%"
done
列出目录中所有的符号链接文件.
directory=${1-`pwd`}
for file in "$( find $directory -type l )" # -type l = 符号链接
do
  echo "$file"
done | sort >> "$OUTFILE" # 否则的话, 列出的文件都是未经排序的. 重定向到一个文件中.
for file in $(ls $2.0*) # 在变量列表中使用通配符
有一种非常像C语言for循环的语法形式. 需要使用(()).
for ((a=1, b=1; a <= LIMIT ; a++, b++)) # 逗号将同时进行两条操作.
do
  echo -n "$a-$b "
done
exit $?
while

  这种结构在循环的开头判断条件是否满足, 如果条件一直满足, 那么就一直循环下去 (返回0作为退出状态码). 与for循环的区别是, while循环更适合在循环次数未知的情况下使用.

while [condition]
do
  command...
done

while [condition] ; do  #与for循环一样, 如果想把do和条件判断放到同一行上的话, 还是需要一个分号。

一个while循环可以有多个判断条件. 但是只有最后一个才能够决定是否能够退出循环

 

while echo "previous-variable = $previous"
    previous=$var1
    [ "$var1" != end ]

do...done

 

与for循环一样, while循环也可以通过(())来使用C风格的语法

((a = 1)) # a=1 # 双圆括号允许赋值两边的空格, 就像C语言一样.
while (( a <= LIMIT )) # 双圆括号, 变量前边没有"$".
do
  echo -n "$a "
  ((a += 1)) # let "a+=1"

done 

while循环的stdin可以使用<来重定向到一个文件. while循环的stdin支持管道.

until

这个结构在循环的顶部判断条件, 并且如果条件一直为false, 那么就一直循环下去. (与while循环相反).

until [condition-is-true]
do
  command...
done

注意, until循环的条件判断在循环的顶部, 这与某些编程语言是不同的.

until [condition-is-true] ; do 放在同一行里,需要使用分号.

嵌套循环: 在一个循环中还有一个循环, 内部循环在外部循环体中

循环控制

影响循环行为的命令 break, continue : break命令用来跳出循环, 而continue命令只会跳过本次循环, 忽略本次循环剩余的代码, 进入循环的下一次迭代.

continue命令也可以象break命令一样带一个参数. 一个不带参数的continue命令只会去掉本次循环的剩余代码. 而continue N将会把N层循环的剩余代码都去掉, 但是循环的次数不变.

[ -r .Iso.$beta ] && continue
[ -r .lock.$beta ] && sleep 10 && continue

 

测试与分支(case与select结构)

case (in) / esac , 在shell中的case结构与C/C++中的switch结构是相同的,它的作用和多个if/then/else语句的作用相同。

case "$variable" in
$condition1" )
TT CLASS="REPLACEABLE" >command...
;
$condition2" )
TT CLASS="REPLACEABLE" >command...
;
esac

对变量使用""并不是强制的, 因为不会发生单词分割.

每句测试行, 都以右小括号)来结尾.

每个条件判断语句块都以一对分号结尾 ;;

case块以esac (case的反向拼写)结尾.

case结构也可以过滤通配(globbing)模式的字符串.

case $( arch ) in                i386* ) echo "80386-based machine";;i486 ) echo "80486-based machine";;i586 ) echo "Pentium-based machine";;i686 ) echo "Pentium2+-based machine";;*    ) echo "Other type of machine";;
esac
case "$Keypress" in[[:lower:]] ) echo "Lowercase letter";;[[:upper:]] ) echo "Uppercase letter";;[0-9] ) echo "Digit";;* ) echo "Punctuation, whitespace, or other";;
esac #  允许字符串的范围出现在[中括号]中,#+ 或者出现在POSIX风格的[[双中括号中.while [ $# -gt 0 ]; do # 直到你用完所有的参数. . .
   case "$1" in-d|--debug)# 是"-d""--debug" 参数?DEBUG=1;;
     -c|--conf)
       CONFFILE="$2"shift
       if [ ! -f $CONFFILE ]; then
        echo "Error: Supplied file doesn't exist!"
        exit $E_CONFFILE # 错误: 文件未发现.
       fi
      ;;
   esac
 shift # 检查剩余的参数.
 done

 


转载于:https://www.cnblogs.com/fly-xiang-zhao/p/3707524.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python数据结构常见的八大排序算法(详细整理)

前言 八大排序&#xff0c;三大查找是《数据结构》当中非常基础的知识点&#xff0c;在这里为了复习顺带总结了一下常见的八种排序算法。 常见的八大排序算法&#xff0c;他们之间关系如下&#xff1a; 排序算法.png 他们的性能比较&#xff1a; 下面&#xff0c;利用Python分别…

牛客 牛牛选物(01背包)

文章目录1. 题目2. 解题1. 题目 链接&#xff1a;https://ac.nowcoder.com/acm/contest/9887/A 来源&#xff1a;牛客网 牛牛有现在有n个物品&#xff0c;每个物品有一个体积v[i]和重量g[i],他想选择其中总体积恰好为V的若干个物品&#xff0c;想使这若干个物品的总重量最大&…

asp.net学习之再论sqlDataSource

asp.net学习之再论sqlDataSource 原文:asp.net学习之再论sqlDataSource本节从上一节没有阐述的几个方面&#xff0c;再讨论一下SqlDataSource的用法及注意的事项。 上一节的链接地址如下&#xff1a;http://www.cnblogs.com/shipfi/archive/2009/10/15/1584093.html 1. S…

微信小程序最常用的布局——Flex布局

最近在学习微信小程序&#xff0c;在设计首页布局的时候&#xff0c;新认识了一种布局方式display:flex 1 .container { 2 display: flex; 3 flex-direction: column; 4 align-items: center; 5 background-color: #b3d4db; 6 } 编译之后的效果很明显&#xff0c;界面…

LeetCode 649. Dota2 参议院(循环队列)

文章目录1. 题目2. 解题1. 题目 Dota2 的世界里有两个阵营&#xff1a;Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中&#xff0c;每一位参议员都可以行…

'[linux下tomcat 配置

tomcat目录结构bin ——Tomcat执行脚本目录 conf ——Tomcat配置文件 lib ——Tomcat运行需要的库文件&#xff08;JARS&#xff09; logs ——Tomcat执行时的LOG文件 temp ——Tomcat临时文件存放目录 webapps ——Tomcat的主要Web发布目录&#xff08;存放我们自己的JSP,SER…

微信小程序基础(一)

一.注册小程序账号&#xff0c;下载IDE 1.官网注册https://mp.weixin.qq.com/&#xff0c;并下载IDE。 2.官方文档一向都是最好的学习资料。 注意&#xff1a; &#xff08;1&#xff09;注册账号之后会有一个appid&#xff0c;新建项目的时候需要填上&#xff0c;不然很多…

[Kaggle] Spam/Ham Email Classification 垃圾邮件分类(RNN/GRU/LSTM)

文章目录1. 读入数据2. 文本处理3. 建模4. 训练5. 测试练习地址&#xff1a;https://www.kaggle.com/c/ds100fa19 相关博文 [Kaggle] Spam/Ham Email Classification 垃圾邮件分类&#xff08;spacy&#xff09; [Kaggle] Spam/Ham Email Classification 垃圾邮件分类&#xff…

禁止网页复制

<SCRIPT LANGUAGEjavascript>function click() {alert(禁止你的左键复制&#xff01;) }function click1() {if (event.button2) {alert(禁止右键点击~&#xff01;) }}function CtrlKeyDown(){if (event.ctrlKey) {alert(不当的拷贝将损害您的系统&#xff01;) }}docum…

微信小程序中实现瀑布流布局和无限加载

瀑布流布局是一种比较流行的页面布局方式&#xff0c;最典型的就是Pinterest.com&#xff0c;每个卡片的高度不都一样&#xff0c;形成一种参差不齐的美感。 在HTML5中&#xff0c;我们可以找到很多基于jQuery之类实现的瀑布流布局插件&#xff0c;轻松做出这样的布局形式。在…

LeetCode 1684. 统计一致字符串的数目(哈希)

文章目录1. 题目2. 解题1. 题目 给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。 如果一个字符串的每一个字符都在 allowed 中&#xff0c;就称这个字符串是 一致 字符串。 请你返回 words 数组中 一致 字符串的数目。 示例 1&#xff1a; 输入&#xff…

Android下常见的内存泄露 经典

转自&#xff1a;http://www.linuxidc.com/Linux/2011-10/44785.htm 因为Android使用Java作为开发语言&#xff0c;很多人在使用会不注意内存的问题。 于是有时遇到程序运行时不断消耗内存&#xff0c;最终导致OutOfMemery&#xff0c;程序异常退出&#xff0c;这就是内存泄露导…

微信小程序:页面跳转时传递数据到另一个页面

一、功能描述 页面跳转时&#xff0c;同时把当前页面的数据传递给跳转的目标页面&#xff0c;并在跳转后的目标页面进行展示 二、功能实现 1. 代码实现 test1页面 // pages/test1/test1.js Page({/*** 页面的初始数据*/data: {name:Tom,age:12},buttonListener:function(){…

LeetCode 1685. 有序数组中差绝对值之和(前缀和)

文章目录1. 题目2. 解题1. 题目 给你一个 非递减 有序整数数组 nums 。 请你建立并返回一个整数数组 result&#xff0c;它跟 nums 长度相同&#xff0c;且result[i] 等于 nums[i] 与数组中所有其他元素差的绝对值之和。 换句话说&#xff0c; result[i] 等于 sum(|nums[i]-…

对一个 复杂的json结果进行取值的例子

1 JSON结果集 1 [2 {3 "J_LP_OPERATE_MAIN": {4 "ID": "1900036295",5 "FILL_MAN": "周兴福",6 "FILL_DEPT": "运维一班",7 "STATE…

微信小程序正则判断姓名和手机号

一、页面效果 二、json文件 //获取应用实例 const app getApp() Page({/*** 页面的初始数据*/data: {array: [速美, 现代, 淮安],mode: scaleToFill,src: ../../images/1.png,userInfo: {},hasUserInfo: false,canIUse: wx.canIUse(button.open-type.getUserInfo),userName: …

LeetCode 1686. 石子游戏 VI(贪心)

文章目录1. 题目2. 解题283 / 1660&#xff0c;前17%681 / 6572&#xff0c;前10.4%1. 题目 Alice 和 Bob 轮流玩一个游戏&#xff0c;Alice 先手。 一堆石子里总共有 n 个石子&#xff0c;轮到某个玩家时&#xff0c;他可以 移出 一个石子并得到这个石子的价值。 Alice 和 B…

T4生成实体和简单的CRUD操作

主要跟大家交流下T4,我这里针对的是mysql,我本人比较喜欢用mysql,所以语法针对mysql,所以你要准备mysql的DLL了,同理sqlserver差不多,有兴趣可以自己写写,首先网上找了一个T4的帮助类,得到一些数据库属性,命名为 DbHelper.ttinclude <# template debug"false" hos…

微信小程序的不同函数调用的几种方法

一、调取参数 直接调取当前js中的方法, 调取参数that.bindViewTap(); 二、跳转页面 navigateTo: function () { wx.navigateTo({ url: ../page4/page4 }); },全局变量使用方法 a.js var app getApp() Page({ data: { hex1: [], })} //设置全局变量 if (hex1 ! null) { app.…

微信小程序中带参数返回上一页的方法总结(三种)

本篇文章给大家带来的内容是关于微信小程序中带参数返回上一页的方法总结&#xff08;三种&#xff09;&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。 方法一 把当前页面数据放入本地缓存&#xff08; wx.setStorage&…