shell读取⽂件到变量、管道重定向、if和while嵌套使⽤、命令替换
⽂章⽬录
管道介绍
管道是Linux编程中最常⽤的技术之⼀,管道符“|”
管道技术是Linux⼀种基本的进程间通信技术,它利⽤先进先出(First In First Out,FIFO)排队模型来指挥进程间的通信。对于管道,我们可以形象地把它们当作是连接两个实体的⼀个单向连接器。 Linux管道可⽤于应⽤程序之间、Linux命令之间,以及应⽤程序和Linux命令之间的通信,Shell编程主要是利⽤管道进⾏Linux命令之间的通信
command1 | command2 |…|commandn
command1到commandn表⽰Linux的n个命令,这n个命令利⽤管道进⾏通信。command1执⾏完后,如果没有管道,command1的输出结果将直接显⽰在Shell上,当Shell遇到管道符“|”后,就将command1的输出发送给command2,作为command2的输⼊。
ls -l |grep vi
列出该路径下⽬录的⽂件列表,并在其中查与vi匹配的内容
ls -l |grep vi|wc -l
在上⾯的基础上再对查出来的⾏进⾏计数
ls -l | more
⽤more命令显⽰⽂件显然便于⽤户阅读,尤其是对那些⼀页不够显⽰的结果。利⽤管道功能可以⽅便地将多页的结果进⾏分页显⽰,⽐如,/etc⽬录下有很多⽂件,列出这些⽂件时,需要多页显⽰,我们可以将ls的结果通过管道传给more命令,more命令将多页结果进⾏分页显⽰,便于⽤户查看
注意:
● 管道“|”其实也是I/O重定向的⼀个操作部分。
● 管道左边是⼀个可以送到标准输出(stdout)的命令,右边是⼀个从标准输⼊接收(stdin)的命令;
如果I/O重定向符左边是有输出的命令,右边只能是⽂件,如果I/O重定向符左边是能接收输⼊的命令,右边只能是⽂件。
● 在管道执⾏的时候启动了两个进程,该进程分别执⾏左右两边的命令;⽽I/O重定向符值则在同⼀个进程中完成。
脚本:读取⽂件,在while中使⽤if判断
while:
do
python3 signyy.py |"
var=$()
if[[$var=="yes"]];
then
break
fi
done
echo"value=$var"
注意if后⾯要有空格
位置参数
位置参数(Positional Parameters)是⼀种特殊的Shell变量,⽤于从命令⾏向Shell脚本传递参数,$1表⽰第1个参数,$2表⽰第2个参0为脚本的名字,从10、100等。
数等,{10}开始,参数号需要⽤花括号括起来,如{11}、*和$@⼀样,表⽰从$1开始的全部参数。下⾯举例说明位置参数的⽤法:
脚本:
#!/bin/bash
echo"the parameter: $1"
echo"the parameter number: $#"
命令⾏输⼊ ./test.sh a
linux循环执行命令脚本输出
“the parameter: a”
“the parameter number: 1”
$#是位置参数的个数 $$是执⾏该脚本所启动的进程号
命令替换
命令替换是指将命令的标准输出作为值赋给某个变量,bash Shell定义了两种语法进⾏命令替换,⼀种是使⽤反引号,另⼀种是利⽤$(),两种等价的语法格式如下:
`linux命令`
$(linux命令)
echo`who`
root@iZuf64cvuzy0uruzobicmgZ:/PyTorch-YOLOv31# echo
`date`
Fri Sep 17 09:07:24 CST 2021
当命令替换返回有多⾏结果时,如果不引⽤命令替换的结果,换⾏符也将被删除,
命令替换删除换⾏符:
dir=`ls -l a*`#命令替换
echo$dir#不引⽤dir变量,换⾏符被删除
echo"$dir"#引⽤dir变量,换⾏符保留
命令替换使bash Shell可以与其他编程语⾔编写的程序结合起来,运⾏如C/C++、Java语⾔编写的程序同样输出到stdout上,我们只要使⽤命令替换将输出保存到Shell变量,Shell就可以对其他编程语⾔编写的程序所产⽣的输出进⾏任何处理。
例⼦:example.c
#include<stdio.h>
main(){
printf("hello")
}
然后在⽬录下执⾏:
gcc -o example example.c #编译源⽂件,⽣成可执⾏⽂件
testc =`./example`#将结果赋给testc变量
echo$testc#输出hello
退出状态
在Linux系统中,每当命令执⾏完成后,系统都会返回⼀个退出状态。该退出状态⽤⼀整数值表⽰,⽤于判断命令运⾏正确与否。若退出状态值为0,表⽰命令运⾏成功;若退出状态值不为0,则表⽰命令运⾏失败。最后⼀次执⾏命令的退出状态值被保存在内置变量“$?”中,所以可以通过echo语句测试命
令是否运⾏成功。POSIX规定了⼏种退出状态和退出状态的含义
touch exit_file #创建⽂件
ls
echo$?#输出0 表⽰创建成功
测试条件
测试命令是判断语句和循环语句中条件测试的⼯具,所以该命令对编写Shell脚本是⾮常重要的。
测试命令可⽤于测试表达式的条件的真假。如果测试的条件为真,则返回⼀个 0值;如果测试的条件
为假,将返回⼀个⾮ 0整数值。这⼀点和C语⾔的条件判断语句是有区别的,在C语⾔中,条件为真时返回的是⼀个⾮0正整数值,条件为假时返回⼀个0值,所以,若以前学习过C语⾔,要注意其区别,以免混淆。
格式:
test expression 或者 [ expression ] 空格⼀定不能少
test测试数值:
["$a" -eq "$b"]
echo$?#退出状态为1,说明a b变量不相等
测试字符串
注意仅有⼀种格式 test string

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。