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"

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

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

image
从变量读取列表

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

image
从命令读取值

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

image

image
这个例子在命令替换中使用了 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

image
C 语言的 for 命令

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

image
使用多个变量

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

image
while 命令

目录
相关文章
|
3天前
|
安全 Shell 数据处理
使用Python执行Shell命令并获取结果
在实际应用中,可以根据需要选择适当的参数和方法来执行Shell命令,并处理可能出现的各种情况。无论是系统管理、自动化任务还是数据处理,掌握这些技巧都将极大地提高工作效率。
27 12
|
2月前
|
人工智能 Shell iOS开发
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
165 7
|
2月前
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
49 0
Linux 如何更改默认 Shell
|
2月前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
55 1
|
3月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
83 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
2月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
3月前
|
Shell 知识图谱
Shell printf 命令
10月更文挑战第3天
30 1
|
3月前
|
Unix Shell Linux
常见的shell命令
shell常用命令
69 11
|
4月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
3月前
|
Shell PHP
Shell echo命令
10月更文挑战第3天
26 0