shell初级-----更多结构化命令
for命令
bash shell提供了for命令,允许你创建一个遍历一系列的循环。
for var in list
do
commands
done
1、读取列表中的值
for命令最基本的用法就是遍历for命令自身所定义的一系列值。
[root@node1 ljy]# more ceshi.sh
#!/bin/bash
for test in football basketball volleyball
do
echo "you like $test"
done
[root@node1 ljy]# sh ceshi.sh
you like football
you like basketball
you like volleyball
2、读取列表中的复杂值
如果列表中数值比较麻烦,for命令可能会识别异常。
[root@node1 ljy]# more ceshi.sh
#!/bin/bash
for test in I don\'t know "new york"
do
echo "word:$test"
done
[root@node1 ljy]# sh ceshi.sh
word:I
word:don't
word:know
word:new york
可以使用转义字符(\)或者双引号来定义用到单引号的值。
for循环假定每个值都是空格分割,如果要包含空格的数值,可以用""双引号。
3、从变量读取列表
可以将一些列的值储存在变量中,然后遍历变量中的整个列表。
[root@node1 ljy]# more ceshi.sh
#!/bin/bash
list="baketball football volleyball"
for test in $list
do
echo "word:$test"
done
[root@node1 ljy]# sh ceshi.sh
word:baketball
word:football
word:volleyball
4、从命令读取值
[root@node1 ljy]# more one.txt
football
basketball
volleyball
[root@node1 ljy]# more ceshi.sh
#!/bin/bash
file=/ljy/one.txt
for test in $(cat $file)
do
echo "word:$test"
done
[root@node1 ljy]# sh ceshi.sh
word:football
word:basketball
word:volleyball
5、更改字段分隔符
IFS(内部字段分隔符)环境变量定义了bash shell用做字段分隔符的一些列字符,默认情况下,bash shell将以下字符当做字段分隔符:
1、空格
2、制表符
3、换行符
IFS=$'\n'这个语句表示bash shell会在数据中忽视空格和制表符。
[root@node1 ljy]# more one.txt
football
basketball
volleyball
new york
[root@node1 ljy]# more ceshi.sh
#!/bin/bash
IFS=$'\n'
file=/ljy/one.txt
for test in $(cat $file)
do
echo "word:$test"
done
[root@node1 ljy]# sh ceshi.sh
word:football
word:basketball
word:volleyball
word:new york
假如你遍历一个文件用冒号分隔的值,可以设置为IFS=:
6、通配符读取目录
可以用for命令来遍历目录中的文件,进行操作时必须在文件名或路径中加入通配符*。他会强制shell使用文件扩展匹配。
[root@node1 ljy]# more ceshi.sh
#!/bin/bash
file=/ljy/* for file in /home/*
do
if [ -d "$file" ]
then
echo "$file is a directory"
elif [ -f "$file" ]
then
echo "$file is a file"
fi
done
[root@node1 ljy]# sh ceshi.sh
/home/123 is a file
/home/lisi is a file
/home/ljy is a directory
/home/test.sh is a file
/home/zhangsan is a directory
在Linux中允许目录或者文件名中包含空格,要适应这种情况,应该讲$file变量用双引号圈起来,如果不这么做可能包含空格的目录会有问题。
while命令
while明亮的基本格式:
while test command
do
other commands
done
只要while测试条件成立,while命令就会不停的循环执行下去
实例:
[root@node1 ljy]# more ceshi.sh
#!/bin/bash
var=10
while [ $var -gt 2 ]
do
echo "$var"
var=$[ $var - 1 ]
done
[root@node1 ljy]# sh ceshi.sh
10
9
8
7
6
5
4
3
until命令
一旦测试命令成立循环结束。
[root@node1 ljy]# more ceshi.sh
#!/bin/bash
var=10
until [ $var -eq 2 ]
do
echo "$var"
var=$[ $var - 1 ]
done
[root@node1 ljy]# sh ceshi.sh
10
9
8
7
6
5
4
3
嵌套循环
循环语句可以在循环内使用任意类型的命令,包括其他循环命令,这种循环叫嵌套循环。
实例1:
[root@node1 ljy]# more ceshi.sh
#!/bin/bash
for (( a=1;a<5;a++))
do
echo "this is $a"
for (( b=1;b<4;b++ ))
do
echo " this is $b"
done
done
[root@node1 ljy]# sh ceshi.sh
this is 1
this is 1
this is 2
this is 3
this is 2
this is 1
this is 2
this is 3
this is 3
this is 1
this is 2
this is 3
this is 4
this is 1
this is 2
this is 3
循环处理文件数据
通过IFS环境变量,强制for循环将文件中的每行当成一个条目来处理。
[root@node1 ljy]# more ceshi.sh
#!/bin/bash
IFS=$'\n'
for test in $(cat /etc/passwd)
do
echo "values is $test----"
IFS=:
for value in $test
do
echo "$value"
done
done
[root@node1 ljy]# sh ceshi.sh
values is root:x:0:0:root:/root:/bin/bash----
root
x
0
0
root
/root
/bin/bash
values is bin:x:1:1:bin:/bin:/sbin/nologin----
bin
x
1
1
bin
/bin
/sbin/nologin
控制循环
1、break命令
可以用break命令来跳出任意循环,包括while和until循环
[root@node1 ljy]# more ceshi.sh
#!/bin/bash
for (( a=1;a<9;a++ ))
do
if [ $a -eq 5 ]
then
break
fi
echo "number is $a!"
done
echo "completed!"
[root@node1 ljy]# sh ceshi.sh
number is 1!
number is 2!
number is 3!
number is 4!
completed!
2、continue
continue命令可以提前中止某次循环中的命令,但并不会完全中止整个循环。
[root@node1 ljy]# more ceshi.sh
#!/bin/bash
for (( a=1;a<19;a++ ))
do
if [ $a -gt 5 ]&&[ $a -lt 10 ]
then
continue
fi
echo "number is $a!"
done
echo "completed!"
[root@node1 ljy]# sh ceshi.sh
number is 1!
number is 2!
number is 3!
number is 4!
number is 5!
number is 10!
number is 11!
number is 12!
number is 13!
number is 14!
number is 15!
number is 16!
number is 17!
number is 18!
completed!
处理循环的输出
shell可以将for命令的结果重定向到一个新的文件中,而不是显示在屏幕上。
[root@node1 ljy]# more ceshi.sh
#!/bin/bash
for file in /root/*
do
if [ -d $file ]
then
echo "$file is a directory!"
elif [ -f $file ]
then
echo "$file is a file!"
fi
done > out.txt
[root@node1 ljy]# sh ceshi.sh
[root@node1 ljy]# more out.txt
/root/anaconda-ks.cfg is a file!
/root/ceshi is a file!
/root/one is a file!
/root/test.txt is a file!
shell初级-----更多结构化命令的更多相关文章
- linux shell脚本使用结构化命令
内容: 一.if-then命令 二.if-then-else命令 三.test命令 四.case命令 1.if-then结构化命令中最基本的类型,其格式如下: if command then comm ...
- Shell 语法之结构化命令(流程控制)
许多程序在脚本命令之间需要某种逻辑流控制,允许脚本根据变量值的条件或者其他命令的结果路过一些命令或者循环执行这些命令.这些命令通常被称为结构化命令.和其他高级程序设计语言一样,shell提供了用来控制 ...
- shell脚本之结构化命令if...then...fi
if的用法日常主要用于数值或者字符串的比较来实现结构化的,模拟人脑,就是如果遇到什么事情,我们应该做什么 语法格式分为 1. if command;then command;fi (如果if满足 ...
- linux shell脚本使用结构化命令(2)
一.for命令 二.while命令 三.until命令 1.for命令基本格式 for var in list do commands done oracle@suse:~/testshell> ...
- bash shell笔记3 结构化命令二
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/513601 三 ...
- 《Linux命令行与shell脚本编程大全》第十二章 使用结构化命令
许多程序要就对shell脚本中的命令施加一些逻辑控制流程. 结构化命令允许你改变程序执行的顺序.不一定是依次进行的 12.1 使用if-then语句 如下格式: if command then ...
- bash shell笔记2 结构化命令
二.使用结构化命令 知识内容: # 改变命令流 # 使用if-then逻辑 # 嵌套if-then # 测试条件 # 高级if-then功能 许多程序在脚本命令之间需要某些逻辑控制流,有些命令允许脚本 ...
- shell的结构化命令
shell在逻辑流程控制这里会根据设置的变量值的条件或其他命令的结果跳过一些命令或者循环执行的这些命令.这些命令通常称为结构化命令 1.if-then语句介绍 基本格式 if command then ...
- 学习笔记:CentOS7学习之二十二: 结构化命令case和for、while循环
目录 学习笔记:CentOS7学习之二十二: 结构化命令case和for.while循环 22.1 流程控制语句:case 22.2 循环语句 22.1.2 for-do-done 22.3 whil ...
随机推荐
- redis缓冲与数据库
redis是基于key-value结构存储的,且数据存放在内存中,相对数据库读写较快. 基于redis的优势,将redis中存放用户数据,用户第一次登录时,将用户数据从数据库存放redis中,也可以将 ...
- ThinkPHP利用数据库字段做栏目的无限分类
一直以来对cms后台的栏目管理不太理解,尤其是子栏目顶级栏目这种关系,通过网上的搜索与自己的摸索,实现方法如下(原理是利用数据库的path字段): 1.建立简单的栏目表: CREATE TABLE ` ...
- Hihocoder #1121 二分图一•二分图判定( bfs或者dfs搜索实现 搜索的过程中进行 节点标记 *【模板】)
对于拿到的相亲情况表,我们不妨将其转化成一个图.将每一个人作为一个点(编号1..N),若两个人之间有一场相亲,则在对应的点之间连接一条无向边.(如下图) 因为相亲总是在男女之间进行的,所以每一条边的两 ...
- HDU5877 Weak Pair dfs + 线段树/树状数组 + 离散化
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5877 题意: weak pair的要求: 1.u是v的祖先(注意不一定是父亲) 2.val[u]*va ...
- 一个selenium笔试题——去哪网首页获取符合要求的url并保存
今天在群里看到这样一个笔试题:请使用任何熟悉的面向对象编程语言,编写代码,获取http://www.qyer.com页面中,所有</a>标签"href"属性值包含英文单 ...
- scroll或是其子类被添加进view时,界面自动上移
开发中经常会遇到ViewController添加scroll或是其子类被添加进controller.view时,scroll会自动下移大概64像素 解决: self.edgesForExtendedL ...
- Django_model基础
Django-model基础 ORM 映射关系: 表名 <-------> 类名 字段 <-------> 属性 表记录 <------->类实例对象 创建表( ...
- 洛谷【P839】【NOI导刊】——数页码
题面 一道找规律好题... 首先,我们肯定只能一位一位的统计答案,考虑从高位向低位统计,显然这样要方便的多. 对于第i位,我们统计从$a[i+1]*10^i+0$到$a[i+1]*10^i+a[i]* ...
- plsql导入cvs 时提示missing right parenthesis
删除自动生成的时间格式值,如:SQL function框里自动生成的值
- 万径人踪灭(FFT+manacher)
传送门 这题--我觉得像我这样的菜鸡选手难以想出来-- 题目要求求出一些子序列,使得其关于某个位置是对称的,而且不能是连续一段,求这样的子序列的个数.这个直接求很困难,但是我们可以先求出所有关于某个位 ...