Linux Shell 基础--更多的结构化命令

for 命令
每次 for 命令遍历值列表,它都会将列表中的下个值赋给 $test 变量。 $test 变量可以像 for
命令语句中的其他脚本变量一样使用。在最后一次迭代后, $test 变量的值会在shell脚本的剩余
部分一直保持有效。它会一直保持最后一次迭代的值(除非你修改了它)

for test in Alabama Alaska Arizona Arkansas California Colorado
do
        echo "The next state is $test"
done
echo "The last state we visited was $test"
test=Connecticut
echo "Wait, now we're visiting $test"


for 命令用空格来划分列表中的每个值。如果在单独的数据值中有
空格,就必须用双引号将这些值圈起来

for test in Nevada "New Hampshire" "New Mexico" "New York"
do
        echo "Now going to $test"
done


从变量读取列表

list="Alabama Alaska Arizona Arkansas Colorado"
# 拼接字符串
list=$list" Connecticut"
for state in $list
do
        echo "Have you ever visited $state?"
done


从命令读取值

# 文件读取
file="states"
for state in $(cat $file)
do
        echo "Visit beautiful $state"
done


这个例子在命令替换中使用了 cat 命令来输出文件states的内容。你会注意到states文件中每一
行有一个州,而不是通过空格分隔的。 for 命令仍然以每次一行的方式遍历了 cat 命令的输出,
假定每个州都是在单独的一行上。但这并没有解决数据中有空格的问题。如果你列出了一个名字
中有空格的州, for 命令仍然会将每个单词当作单独的值
更改字段分隔符
造成这个问题的原因是特殊的环境变量 IFS ,叫作内部字段分隔符(internal field separator)。
IFS 环境变量定义了bash shell用作字段分隔符的一系列字符。默认情况下,bash shell会将下列字
符当作字段分隔符:
 空格
 制表符
 换行符
如果bash shell在数据中看到了这些字符中的任意一个,它就会假定这表明了列表中一个新数
据字段的开始。在处理可能含有空格的数据(比如文件名)时,这会非常麻烦,就像你在上一个
脚本示例中看到的。
要解决这个问题,可以在shell脚本中临时更改 IFS 环境变量的值来限制被bash shell当作字段
分隔符的字符。例如,如果你想修改 IFS 的值,使其只能识别换行符,那就必须这么做:
IFS=$'\n'
将这个语句加入到脚本中,告诉bash shell在数据值中忽略空格和制表符

file="states"
IFS=$'\n'
for state in $(cat $file)
do
        echo "Visit beautiful $state"
done

在处理代码量较大的脚本时,可能在一个地方需要修改 IFS 的值,然后忽略这次修改,在
脚本的其他地方继续沿用 IFS 的默认值。一个可参考的安全实践是在改变 IFS 之前保存原
来的 IFS 值,之后再恢复它。
这种技术可以这样实现:
IFS.OLD=$IFS
IFS=$'\n'
<在代码中使用新的IFS值>
IFS=$IFS.OLD
这就保证了在脚本的后续操作中使用的是 IFS 的默认值
用通配符读取目录

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


C 语言的 for 命令

for (( i=1; i <= 10; i++ ))
do
        echo "The next number is $i"
done


使用多个变量

for (( a=1, b=10; a <= 10; a++, b-- ))
do
echo "$a - $b"
done


while 命令


时间: 2024-08-03 23:21:31

Linux Shell 基础--更多的结构化命令的相关文章

Linux shell编程 10 ---- 循环结构

 1 for循环     1 for循环是Linux Shell中常用的结构,for循环有三种结构:一种是列表for循环,第二种是不带列表的for循环,第三种是类C风格的for循环.          2 列表for循环        for variable in list        do            statement        done     3 不带列表for循环         for variable         do              stateme

linux shell 基础

ls 命令 #查看所有文件,包括隐藏文件(linux 隐藏文件是.开头的) ls -a #添加 -F参数 显示区分文件和目录(目录后面带斜杠),F 参数大写 ls -F pwd输出当前目录 pwd # .表示当前目录 # .. 表示父级目录 # -R 列出子目录 ls -R # 列出文件详细信息 -l 小写 ls -l # 过滤 通配符*代表零个或多个字符,?表示一个字符 ls -l *sh #[si] 表示[]对应一个s或者i ls -l connect_2_ecs.[si]h # [a-z]

linux shell 基础 使用日志与心得

在网上看到很多LNAMP/LAMP一键安装环境,使用了很多种,比较好的就那几种,但是他们的灵活度不够,所以想啊,自己整个出来 http://lnmp.org/install.htmlhttp://www.wdlinux.cn/lanmp/ 我是整合这两个环境而成,变化很多. 有很多想法正在慢慢实现中,先把基础的实现. 需实现功能: 1.自定义安装目录(指的是mysql,php,nginx 全部安装到某个目录下) 2.PHP版本选择 以下是用到的 SHELL 命令等 1.#!/bin/bash 第

Linux shell 基础之--基本脚本

在创建shell脚本文件时,必须在文件的第一行指定要使用的shell. 其格式为:#!/bin/bash 在通常的shell脚本中,井号( # )用作注释行.shell并不会处理shell脚本中的注释行.然而, shell脚本文件的第一行是个例外, # 后面的惊叹号会告诉shell用哪个shell来运行脚本(是的,你 可以使用bash shell,同时还可以使用另一个shell来运行你的脚本). 在指定了shell之后,就可以在文件的每一行中输入命令,然后加一个回车符.之前提到过, 注释可用 #

Linux Shell 基础 2

文件权限 # 添加新用户,默认useradd命令不创建用户home目录 useradd testuser # 为账号添加密码 passwd testuser # 要创建home目录加参数 -m useradd -m testuser # centos 7 默认不加参数 -m 也会创建用户目录 useradd testuser3 -m # 默认用户Home目录在root账号home/目录下分配 # 也可以命令行中指定用户home目录 如 useradd -d useradd test6 -d /u

Linux shell 脚本攻略 第二章 命令之乐

2.1 用cat进行拼接     1 cat命令是一个日常会使用到的简单命令,cat本身表示concatenate(拼接)     2 用cat读取文件的一般格式是        cat file1 file2 file3....  // 这个命令将命令行参数的文件内容拼接在一起输出     3 cat命令不仅可以读取文件并拼接数据,它还能够从标准输入中进行读取.要从标准输入中读取,就要使用管道        stand_ouput | cat     4 cat命令可以用来压缩多个空行,使得被

Ruby on rails开发从头来(四十一)- ActiveRecord基础(存储结构化数据)

有时,能够在某个属性中直接存储任意的ruby对象是很方便的,一种办法就是Active Record支持序列化,将一个ruby对象变为一个YMAL字符串,并且将这个字符串存储到属性对应的数据库字段中.在数据库定义中,这个字段必须为text类型. 因为Active Record将数据库中的Char型和text型映射为ruby的string型,所以如果我们需要告诉Active Record使用序列化功能,例如,我们想知道某个客户进行的最后的5次消费,我们创建一个含有text类型字段的表来保存信息: c

Linux shell 基础之Vim编辑器

vim编辑器在内存缓冲区中处理数据,如在启动vim时未指定文件名,或者这个文件不存在,vim会开辟一段新的缓冲区域来编辑. 如果你在命令行下指定了一个已有文件的名字,vim会将文件的整个内容都读到一块缓冲区域来准备编辑 # 当文件不存在时,会新建一个文件并把缓冲区的内容保存到新创建的文件中 vim mytest # 下面会提示New File # vim编辑器有两种模式,插入模式和普通模式 # 普通模式键入i就可以切换到插入模式 # 插入模式下键入esc键可以退回普通模式 # 如果想放弃对对缓冲

Linux shell脚本基础学习详细介绍(完整版)

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Linux 脚本编写基础 ◆1.1 语法基本介绍1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可