bash编程之多分支if 语句及for循环
第十七章、bash编程之多分支if 语句及for循环
- if语句三种格式
- 多分支if语句练习
- for循环
17.1、if语句的三种格式
单分支if语句
if condition;then
条件为真执行的代码
fi
双分支if语句
if condition;then
条件为真执行的代码
else
条件为假执行的代码
fi
多分支if语句
if condition1;then
condition1为真时执行的代码
elif condition2;then
condition2为真时执行的代码
elif condition3;then
condition3为真时执行的代码
...
elif condition10;then
condition10为真时执行的代码
else
条件都为假时执行的代码
fi
# 多分支的if语句elif可以出现n次;
注意:即便多个分支条件可能同时都能满足,分支只会执行其中一个,如果第一个条件满足则后续分支均不执行;
示例
# 练习、写一个脚本
# 1、列出如下菜单给用户
disk)show disk info.
mem)show memory info.
cpu)show cpu info.
*)QUIT
# 2、提示用户给出自己的选择,而后显示对应其选系的相应系统信息;
#!/bin/bash
# -*- coding: utf-8 -*-
# Filename: systeminfo.sh
# Author: buhui
# Date: 2016-12-29
# Description: show system status
cat <<EOF
disk)show disk info.
mem)show memory info.
cpu)show cpu info.
*)QUIT
EOF
read -p "Enter your choice: " option
if [[ $option == "disk" ]];then
fdisk -l /dev/sd[a-z]
elif [[ $option == "mem" ]];then
free -m
elif [[ $option == "cpu" ]];then
lscpu
else
echo "QUIT..."
exit 1
fi
17.2、lscpu命令
查看当前服务器的CPU信息;
示例
[root@www scripts]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
座: 1
NUMA 节点: 1
厂商 ID: GenuineIntel
CPU 系列: 6
型号: 42
型号名称: Intel(R) Core(TM) i5-2410M CPU @ 2.30GHz
步进: 7
CPU MHz: 2294.860
BogoMIPS: 4589.72
超管理器厂商: VMware
虚拟化类型: 完全
L1d 缓存: 32K
L1i 缓存: 32K
L2 缓存: 256K
L3 缓存: 3072K
NUMA 节点0 CPU: 0-3
17.3、for循环
将一段代码重复执行多次;
for循环语法格式
for VARIABLE in LIST;do
循环体
done
LIST的生成方式
直接给出一个列表;例如:1 2 3 4 5
整数列表
(a) {1..10}:通过命令行展开的方式生成;
(b)使用seq命令生成
3.返回列表的命令;例如:ls /etc/
4.glob,通过模式匹配;例如:for i in /etc/*;do
5.变量引用;例如:$@, $*
示例
练习1、求100以内所有正整数之和;
#!/bin/bash
# -*- coding: utf-8 -*-
# Filename: sum.sh
# Author: buhui
# Date: 2016-12-29
# Description:
declare -i sum=0
for i in {1..100};do
let sum=$sum+$i
done
echo "$sum"
练习2、判断/var/log目录下每个文件的内容类型
#!/bin/bash
# -*- coding: utf-8 -*-
# Filename: filetype.sh
# Author: buhui
# Date: 2016-12-29
# Description:
for file in /var/log/*;do
if [ -f $file ];then
echo "common file."
elif [ -d $file ];then
echo "directory file."
elif [ -S $file ];then
echo "socket file."
elif [ -L $file ];then
echo "softlink file."
elif [ -b $file ];then
echo "block file."
else
echo "unkown."
fi
done
练习3、分别求100以内所有偶数之和,以及所有奇数之和;
#!/bin/bash
# -*- coding: utf-8 -*-
# Filename: sum2.sh
# Author: buhui
# Date: 2016-12-29
# Description:
declare -i even_num=0
declare -i uneven_num=0
for num1 in $(seq 1 2 100);do
let uneven_num=$uneven_num+$num1
done
for num2 in $(seq 2 2 100);do
let even_num=$even_num+$num2
done
echo "The sum of all the even for: $even_num"
echo "The sum of all the odd numbers: $uneven_num"
练习4、计算当前系统上所有用户id之和;
#!/bin/bash
# -*- coding: utf-8 -*-
# Filename: userid.sh
# Author: buhui
# Date: 2016-12-29
# Description:
declare -i sum=0
user_list=$(cut -d: -f3 /etc/passwd)
for uid in $user_list;do
let sum=$sum+$uid
done
echo "All users uid sum for: $sum"
练习5、通过脚本参数传递一个目录给脚本,而后计算此目录下所有文本文件的行数之和;并说明此类文件的总数;
#!/bin/bash
# -*- coding: utf-8 -*-
# Filename: filelinesum.sh
# Author: buhui
# Date: 2016-12-29
# Description:
declare -i linesum=0
if [ $# -lt 1 ];then
echo "at least one dirctory."
exit 1
fi
if ! [ -d $1 ];then
echo "Not a dirctory."
exit 2
fi
path=$(echo $1|sed -n "s#\(\w\)/#\1#gp")
if [ -z $path ];then
path=$1
fi
text_file_num=$(file $path/*|grep "text"|wc -l)
file_list=$(file $path/*|grep "text"|awk -F'[ :]' '{print $1}')
for i in $file_list;do
temp=$(wc -l $i|cut -d' ' -f1)
let linesum=$linesum+$temp
done
#
echo "text file line sum= $linesum"
echo "text file sum= $text_file_num"
bash编程之多分支if 语句及for循环的更多相关文章
- Bash编程的test和条件语句
1.if语句一句条件判断结果选择执行路径.最简单的if-then句型: if command //如果command的退出状态为0,执行body then body fi 重点:if认为command ...
- bash 编程中循环语句用法
1.if 是单分支语句,使用格式如下: if condition ; then statement ….. fi 2.if … else 是双分支语句,使用格式如下: if condition ; t ...
- bash编程总结
bash应该是目前Linux上最流行的shell脚本解释程序了(还有个shell叫dash,我太讨厌这个东东了.),只要你在linux上工作,并且希望自己能够工作得更愉悦,那么你应该熟悉最基本的bas ...
- Linux中bash编程
bash编程也叫shell编程 预定义变量 $? 最后一次执行的命令的返回状态.如果这个变量的值为0,证明上一个命令正确的执行:如果这个变量返回的值非0(具体是那个数,有命令自己来决定 ...
- bash编程基础
bash变量 变量命名: 1.不能使用程序中的关键字(保留字) 2.只能使用数字.字母和下划线,且不能以数字开头 3.要见名知义 变量类型: 数值型:精确数值(整数),近似数值(浮点型) 字符型:ch ...
- vb编程中的选择结构语句的写法
1996年,Bohra和Jacopin提出了结构化算法的3中种基本结构:顺序结构.选择结构和循环结构 目前已经得到证明,无论多么复杂的程序,都是由上面的3种基本结构中的一种或者多种的组合构成 在此笔者 ...
- 洗礼灵魂,修炼python(10)--有趣的判断分支+从实例中掌握循环语句
所有的编程语言里都有判断语句和循环语句. 判断语句则是用来分支程序流程的 循环语句则是为了实现一个效果,让程序的规律性的重复操作 不用说,分支和循环自然在python里也是有的 一,条件判断:if,i ...
- 怎样用 Bash 编程:逻辑操作符和 shell 扩展
学习逻辑操作符和 shell 扩展,本文是三篇 Bash 编程系列的第二篇. Bash 是一种强大的编程语言,完美契合命令行和 shell 脚本.本系列(三篇文章,基于我的 三集 Linux 自学课程 ...
- 怎样用 Bash 编程:语法和工具
让我们通过本系列文章来学习基本的 Bash 编程语法和工具,以及如何使用变量和控制运算符,这是三篇中的第一篇. Shell 是操作系统的命令解释器,其中 Bash 是我最喜欢的.每当用户或者系统管理员 ...
随机推荐
- C# 仿刷-框架MvcThrottle的使用
1.介绍 1)用MvcThrottle你能保护你的网站不受攻击.刷. 2)你可以限制与设置多个不同场景允许的IP,设置 每秒/分/天 允许访问IP. 3)你可以定义限制,来处理所有请求.或者某个Con ...
- Android开发学习之路-3DTouch效果模仿
3D Touch是什么效果的大家应该都知道了.什么?不知道,那也没办法呀,我也没有iPhone 6s演示给你看的. 本篇博客要做的效果图: 来个低质量动图: 这个动图效果不是很好,实际上模糊效果应该是 ...
- 如何优雅地使用Sublime Text
Sublime Text:一款具有代码高亮.语法提示.自动完成且反应快速的编辑器软件,不仅具有华丽的界面,还支持插件扩展机制,用她来写代码,绝对是一种享受.相比于难于上手的Vim,浮肿沉重的Eclip ...
- HTML中的拖拉框----在路上(29)
拖拽框---当鼠标按在指定的区域才可进行拖拽 思想:只有当鼠标是按在一个大div里的小div才可拖拽,其他不可:拖拽框有多种方法,这里以其中一种分享:下面使我自己写的demo,简单有效. <!D ...
- 初学者--bootstrap(六)组件中的下拉菜单----在路上(10)
组件---下拉菜单 用于显示链接列表的可切换.有上下文的菜单.下拉菜单的 JavaScript 插件让它具有了交互性. 将下拉菜单触发器和下拉菜单都包裹在 .dropdown 里,或者另一个声明了 p ...
- 说说面向服务的体系架构SOA
序言 在.Net的世界中,一提及SOA,大家想到的应该是Web Service,WCF,还有人或许也会在.NET MVC中的Web API上做上标记,然后泛泛其谈! 的确,微软的这些技术也确实推动着面 ...
- 【WPF】运用MEF实现窗口的动态扩展
若干年前,老周写了几篇有关MEF的烂文,简单地说,MEF是一种动态扩展技术,比如可以指定以某个程序集或某个目录为搜索范围,应用程序在运行时会自动搜索符合条件的类型,并自动完成导入,这样做的好处是,主程 ...
- 【.NET深呼吸】Zip文件操作(2):动态生成Zip文档
通过前面一篇烂文的介绍,大伙儿知道,ZipArchive类表示一个zip文档实例,除了用上一篇文章中所列的方法来读写zip文件外,还可以直接通过ZipArchive类,动态生成zip文件. 文件流操作 ...
- owner:轻松管理java项目配置
前段时间,一同事说在 github 上“活捉了”一个很有趣的开源项目,它是一个超轻量级的 jar 包,能够帮助你在 java 项目中摒弃样板式的 properties 配置代码,让你轻松自如地管理和使 ...
- JavaScript -Array.form方法
Array.from方法可以把一个类数组或者课遍历对象转换为一个正真的数组 语法 Array.from(arrayLike[, mapFn[, thisArg]]) 参数 arrayLike 想要转换 ...