首页 > 系统相关 >shell重定向与变量

shell重定向与变量

时间:2024-05-14 14:30:04浏览次数:28  
标签:输出 xargs shell 重定向 文件 命令 变量

一、重定向与管道符

重定向

重定向:改变电脑的数据输出方向,默认是输出在屏幕上

类型设备文件文件描述编号默认设备
标准输入 /dev/stdin 0 键盘
标准输出 /dev/stdout 1 显示器
标准错误输出 /dev/stderr 2 显示器

交互式硬件设备

  • 标准输入:从该设备接收用户输入的数据

  • 标准输出:通过该设备向用户输出数据

  • 标准错误:通过该设备报告执行出错信息

重定向输入输出

类型操作符用途
重定向输入 < 从指定的文件读取数据,而不是从键盘输入
重定向输出 1>或> 将输出结果保存到指定的文件(覆盖原有内容)
1>>或>>  将输出结果追加到指定的文件尾部
标准错误输出 2> 将错误信息保存到指定的文件(覆盖原有内容)
2>>  标准错误输出结果追加到指定的文件尾部
混合输出 &>无论对错都可以重定向

将标准输出、标准错误的内容保存到同一个文件中

/dev/pts改变输出的终端显示器

管道符 |

将左侧的命令输出结果,作为右侧命令的输入(处理对象)可以 叠加使用

管道符 | 结合 xargs 通常在以下情况下会很有用:

  1. 将命令的输出作为另一个命令的参数: 当你想要将一个命令的输出作为另一个命令的参数时,可以使用管道符结合 xargs 来实现。例如,你可能想要对 find 命令的结果应用某种操作,而 xargs 可以帮助你将这些结果作为参数传递给另一个命令。

  2. 批量处理文件列表: 当你需要对一个命令的输出中的每一行进行处理时,xargs 就会派上用场。它可以将输入分割成适当大小的块,并将它们作为参数传递给另一个命令,从而避免参数列表过长的问题。

  3. 处理特殊字符: 在某些情况下,命令的输出可能包含特殊字符(如空格或换行符),而 xargs 可以帮助你处理这些特殊字符,确保命令的正确执行。

  4. 多线程执行命令: 通过 xargs-P 选项,你可以实现多线程执行命令,从而加速处理过程,特别是在处理大量数据时。

总的来说,当你需要将命令的输出作为另一个命令的参数,并且希望能够灵活地处理这些参数时,结合管道符和 xargs 是一个不错的选择。

例如批量操作文件: 可以使用 find 命令查找符合条件的文件,然后通过管道符将文件列表传递给 xargs,再执行相应的操作,如删除、移动或压缩等。

find /path/to/files -type f -name "*.txt" | xargs rm

二、变量

变量类型

常见的shell变量类型包括:

  • 自定义变量:由用户自己定义,修改和使用
  • 预定义变量:Bash中内置的一类变量 shell 不能修改 规定好的变量 放在那里让你使用
  • 环境变量:由系统维护,用于设置工作环境 当前目录 当前主机名 $PATH
  • 只读变量:只可以读取不可以更改 只能不能修改
  • 位置变量:通过命令行给脚本传递参数

变量调用

  1. 赋值时使用双引号(" ")可以直接调用变量
  2. 赋值时使用单引号(' ')变量$只会被认为是字符$ 不会调用变量
  3. 赋值时使用(``反撇在tab上面)命令替换,提取命令执行后的输出结 果 和$( ) 用法相同
  4. {}可以分隔变量值

read -p

从键盘输入的内容变成变量

 整数运算

运算符:
加法 + ; 减法 - ; 乘法 \* ; 除法 / ; 取余(取模)% ; 

1.let

 2.(())

 3.$[]

 4.expr(注意在运算符前后加空格)

5.bc

6.生成随机数

生成1-34的随机数:

i=$(expr 12  \ *  5 )
i=$((12 * 5))
i=$[12 * 5]
let i=12*5
i++ 相当于 i=$[ $i+1 ]
i-- 相当于 i=$[ $i - 1 ]
i+=2 相当于 i=$[ $i+2 ]

环境变量

env查看环境变量

$USER 表示用户名称
$HOME 表示用户的宿主目录
$LANG 表示语言和字符集
$PWD 表示当前所在工作目录
$PATH 表示可执行用户程序的默认路径

预定义(状态)变量

bash 帮你定义的常见状态变量如下:

  • $*:表示所有位置参数的内容看成一个整体返回 返回所有

  • $@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有

  • $?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常

  • $#:表示命令行中位置参数的总个数

  • $0:表示当前执行的脚本或程序的名称 当前脚本的名字

  • $$:当前bash的进程id

  • $!: 后台任务最后一个id

 位置变量

位置变量也称为位置参数,使用$1、$2、$3、…$9 表示。

 只读变量

变量值不允许修改(重新赋值)的情况

无法使用 unset删除

最快方法重启

 





 

标签:输出,xargs,shell,重定向,文件,命令,变量
From: https://www.cnblogs.com/hxqwe/p/18189379

相关文章

  • shell流程控制
    判断fi[root@VM-12-15-centoshome]#vitest.sh#编写如下a=100b=100iftest$[a]-eq$[b];thenecho"true";fi#执行[root@VM-12-15-centoshome]#shtest.shtrueifelse[root@VM-12-15-centoshome]#vitest.sh#编写如下a=100b=101iftest$[a]......
  • springmvc中的转发和重定向
    转发和重定向的区别转发是一个请求一次响应,重定向是两次请求两次响应;转发地址栏不发生变化,重定向地址栏发生变化(会显示重定向后的地址);转发只能转发到本项目中其他控制器(在学习JavaWeb的时候,说的是:转发只能转发到本项目中其他Servlet),重定向不仅能重定向到本项目中的其......
  • shell test命令
    数值案例1[root@VM-12-15-centoshome]#vitest.sh#编写如下num1=100num2=100iftest$[num1]-eq$[num2]thenecho'两个数相等!'elseecho'两个数不相等!'fi#执行[root@VM-12-15-centoshome]#shtest.sh两个数相等!案例2[root@VM-12-15-centos......
  • shell-cut,sed,awk
    一、cut:强大文本编辑处理工具,可以将文本按列进行划分的文本处理1、cut切割提取列cut文件或数据-d分隔符切割-f提取第x列2、cut切割提取字符cut文件或数据-c提取字符范围(n-,n-m,-n,n1,n2..)3、cut切割提取字节cut文件或数据-b提取字节范围......
  • shell echo命令
    打印字符串echo"Itisatest"打印特殊字符echo"\"Itisatest\""#输出结果"Itisatest"打印变量#read表示接收执行脚本的输入的第1行#编辑[root@VM-12-15-centoshome]#vitest.sh#编写如下#!/bin/shreadnameecho"$nameItisat......
  • shell传递参数
    执行脚本时传入参数[root@VM-12-15-centoshome]#vitest.sh#编写如下echo"Shell传递参数实例!";echo"执行的文件名:$0";echo"第一个参数为:$1";echo"第二个参数为:$2";echo"第三个参数为:$3";#设置权限[root@VM-12-15-centoshome]#chmod+xtest.sh......
  • 变量声明之 let ,var ,const
    一、letlet不能重复声明变量作用域为块级但不影响作用域链,即可以向上查找let变量不存在变量提升二、var可重复声明作用域为全局有变量提升三、const声明值为常量所以在声明时必须初始化,否则报错const值不能修改作用域为块级const可声明数组和对象,并且对于......
  • 一个PowerShell内网渗透测试的大纲:
    一个PowerShell内网渗透测试的大纲:介绍内网渗透测试:什么是内网渗透测试?内网渗透测试的目的和方法。内网渗透测试的法律和道德问题。PowerShell基础知识回顾:PowerShell的基本语法和命令。PowerShell的常见用途和功能。PowerShell在内网渗透测试中的重要性和作用......
  • shell-函数
    一、无参函数[root@vm-paasscwyfy]#catfunNoParamReturn.sh#!/bin/bashdemo(){echo"无入参返参函数执行..."}#执行函数demo二、无参有返回值函数[root@vm-paasscwyfy]#catfunYesReturn.sh#!/bin/bashdemo(){read-p"请输入第一个数字:"number1re......
  • 在Linux中,什么是Shell脚本,并且如何编写它。
    在Linux中,Shell脚本是一种编程脚本,用于自动化常见任务。它们允许用户将一系列命令行指令组合成一个文件,并通过运行该文件来执行这些指令。Shell脚本通常由bash(BourneAgainSHell)或其他shell(如zsh、csh、ksh等)解释和执行。1.什么是Shell脚本?Shell:是Linux/UNIX操作系统中的一个......