linux shell脚本攻略04-将命令序列的输出读入变量,管道

本文深入探讨了Shell脚本中的实用技巧,包括如何通过子shell和反引用处理命令输出,保持空格和换行符不变。同时,文章介绍了两种运行命令直至成功的循环方法,并对比了它们的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ls | cat -n > out.txt

①子shell的方式

output=$(ls |cat -n)

②反引用

output=`ls | cat -n`

第一种方式是子shell的这种方式,利用子shell生成一个独立的进程,可以使用()操作符来定义一个子shell;注意:命令在子shell中执行不会对当前shell有任何影响,所有的改变仅限于子shell

pwd;
(cd /bin;ls)
pwd;

由于cd是在子shell中运行,不影响父shell,两次pwd结果一致

在使用子shell或者反引用的方式时,可以将它放入一个双引号中,以保留空格和换行符\n

运行命令直至执行成功

while true
do	
$@ && return
done

一种更快的做法

while :
do
$@ && return
done

true是作为/bin下的一个二进制文件来实现的,所以第一种写法每次循环会fork一个紫禁城,第二种中的:符号是shell内建命令,他总是会返回0的退出码,效率更好

### Shell脚本中的If语句与循环结构 在Shell脚本中,`if`语句用于基于特定条件执行不同的代码路径。而循环结构则提供了重复执行一组命令的能力。两者可以结合起来实现更复杂的逻辑处理。 #### If语句基本语法 如果想要根据某个条件决定是否执行一段代码,则可以使用如下形式的 `if...fi` 结构: ```bash #!/bin/bash value=10 if [ $value -gt 5 ]; then echo "Value is greater than five" else echo "Value is not greater than five" fi ``` 这段代码会判断变量 `$value` 是否大于5,并据此打印相应的消息[^1]。 #### For循环结合If语句的例子 下面是一个简单的例子展示了如何在一个范围内迭代并利用 `if` 来筛选合条件的数据项: ```bash #!/bin/bash for i in {1..10}; do if ((i % 2 == 0)); then echo "$i 是偶数" fi done ``` 此脚本会在数字序列 `{1..10}` 上遍历每一个整数值;当遇到能被2整除的情况时(即偶数),就输出该值及其描述信息[^2]。 #### While循环搭配If语句的应用场景 另一个常见的模式是在不知道确切次数的情况下持续运行直到满足某些终止条件为止。这里有一个读取文件行数的小案例说明这一点: ```bash #!/bin/bash while IFS= read -r line; do if [[ $line =~ ^# ]]; then continue # 如果是以井号开头的注释行跳过本次循环 elif [ -z "$line" ]; then break # 遇到空白行停止整个过程 else echo "Processing non-empty and uncommented line: $line" fi done < input.txt ``` 上述程序通过不断从名为 `input.txt` 的文本文件里逐行读入数据来进行处理,在碰到以井号(`#`)作为首字或是完全为空白的一行之前都会继续下去[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值