shell脚本中的“2< " ">&2" "&>”

文章原地址 :http://www.linuxidc.com/Linux/2014-07/104707.htm

Linux标准文件描述符:

文件描述符 缩写 描述
0 STDIN 标准输入
1 STDOUT 标准输出
2 STDERR 标准错误

标准输入和标准输出指的就是键盘和显示器。

当文件描述符(0,1,2)与重定向符号(<)组合之后,就可以重新定向输入,输出,及错误。

  • command 2>file1
    • 命令执行的错误信息保存到了file1文件中。显示屏只是显示正确的信息。
  • command 1>file1 2>file2
    • 命令执行后,没有显示。因为正确输出到file1,错误定向到file2
  • command &>file1
    • 命令执行后,输出和错误都定向到file1中

在shell脚本中,可以定义“错误”输出到STDERR指定的文件.需要在重定向符和文件描述符之间加一个and符(&)

  1. cat test
  2. #!/bin/bash
  3. echo " this is ERROR ">&2
  4. echo "this is output"
  5. $

运行脚本

  1. [root@localhost ~]#./test 2>file1
  2. thisis output
  3. [root@localhost ~]# cat file1
  4. thisis ERROR

可以再脚本中使用exec命令:

  1. exec1>file1
  2. exec2>file2
  3. echo " this is ERROR ">&2
  4. echo "this is output"

运行如上脚本,则输出都在file1和file2中。

也可以使用exec 0<file1,从文件1中读取输入。


curl --digest --compressed -u admin:PASSWORD http://169.254.0.1/import/config -X POST --form-string 'configrecord=<?xml version="1.0" standalone="yes"?> <!-- Automatically generated XML --> <!DOCTYPE configrecord [ <!ELEMENT configrecord (configgroup+)> <!ELEMENT configgroup (configitem+)> <!ELEMENT configitem (value+)> <!ELEMENT value (#PCDATA)> <!ATTLIST configrecord version CDATA #IMPLIED> <!ATTLIST configgroup name CDATA #IMPLIED> <!ATTLIST configgroup instance CDATA #IMPLIED> <!ATTLIST configitem name CDATA #IMPLIED> <!ATTLIST configitem instance CDATA #IMPLIED> <!ATTLIST value name CDATA #IMPLIED> ]> <configrecord version = "0.1.0.1"> <configgroup name = "Radio"> <configitem name = "Mode"> <value>Enabled</value> </configitem> <configitem name = "Band"> <value>5 GHz Only</value> </configitem> <configitem name = "Antenna Selection"> <value>Auto</value> </configitem> <configitem name = "Keep Alive"> <value>Enabled</value> </configitem> <configitem name = "Max Volley Delay"> <value>5 seconds</value> </configitem> <configitem name = "TX Power Maximum"> <value>19 dBm</value> </configitem> <configitem name = "Log"> <value>Disabled</value> </configitem> <configitem name = "Event Log"> <value>Disabled</value> </configitem> <configitem name = "Roaming"> <value name = "State">Disabled</value> <value name = "Scan Period">5 seconds</value> <value name = "Band 2.4GHz Trigger Delta">5 dBm</value> <value name = "Band 2.4GHz RSSI Floor">-65 dBm</value> <value name = "Band 5GHz Trigger Delta">5 dBm</value> <value name = "Band 5GHz RSSI Floor">-65 dBm</value> </configitem> <configitem name = "Scanning"> <value name = "RSSI Floor">-60 dBm</value> </configitem> </configgroup> </configrecord>' 将以上代码加载到一个shel脚本中 执行脚本就执行此命令
最新发布
07-11
### 编写 Shell 脚本执行 `curl` 命令 将给定的 `curl` 命令嵌入到 Shell 脚本中,可以实现自动化执行和重复调用。以下是一个完整的示例脚本,它将配置 XML 数据通过 POST 请求发送到指定的 URL,并记录执行日志。 #### 示例脚本内容: ```bash #!/bin/bash # 定义变量 USERNAME="admin" PASSWORD="your_password_here" URL="http://169.254.0.1/import/config" LOG_FILE="curl_execution.log" # 构建 XML 配置数据 CONFIG_XML='<?xml version="1.0" standalone="yes"?> <!-- Automatically generated XML --> <!DOCTYPE configrecord [ <!ELEMENT configrecord (configgroup+)> <!ELEMENT configgroup (configitem+)> <!ELEMENT configitem (value+)> <!ELEMENT value (#PCDATA)> <!ATTLIST configrecord version CDATA #IMPLIED> <!ATTLIST configgroup name CDATA #IMPLIED> <!ATTLIST configgroup instance CDATA #IMPLIED> <!ATTLIST configitem name CDATA #IMPLIED> <!ATTLIST configitem instance CDATA #IMPLIED> <!ATTLIST value name CDATA #IMPLIED> ]> <configrecord version="0.1.0.1"> <configgroup name="Radio"> <configitem name="Mode"> <value>Enabled</value> </configitem> <configitem name="Band"> <value>5 GHz Only</value> </configitem> <configitem name="Antenna Selection"> <value>Auto</value> </configitem> <configitem name="Keep Alive"> <value>Enabled</value> </configitem> <configitem name="Max Volley Delay"> <value>5 seconds</value> </configitem> <configitem name="TX Power Maximum"> <value>19 dBm</value> </configitem> <configitem name="Log"> <value>Disabled</value> </configitem> <configitem name="Event Log"> <value>Disabled</value> </configitem> <configitem name="Roaming"> <value name="State">Disabled</value> <value name="Scan Period">5 seconds</value> <value name="Band 2.4GHz Trigger Delta">5 dBm</value> <value name="Band 2.4GHz RSSI Floor">-65 dBm</value> <value name="Band 5GHz Trigger Delta">5 dBm</value> <value name="Band 5GHz RSSI Floor">-65 dBm</value> </configitem> <configitem name="Scanning"> <value name="RSSI Floor">-60 dBm</value> </configitem> </configgroup> </configrecord>' # 执行 curl 命令并记录日志 echo "[$(date "+%Y-%m-%d %H:%M:%S")] Starting request..." >> "$LOG_FILE" curl -u "$USERNAME:$PASSWORD" --digest -X POST "$URL" \ -H "Content-Type: application/xml" \ -d "$CONFIG_XML" \ 2>&1 | tee -a "$LOG_FILE" echo "[$(date "+%Y-%m-%d %H:%M:%S")] Request completed." >> "$LOG_FILE" ``` #### 脚本说明: - **变量定义**:使用变量存储用户名、密码、目标 URL 和日志文件路径,便于后续维护。 - **XML 数据构建**:将 XML 数据直接拼接为字符串,确保格式正确。 - **日志记录**:在执行前后记录时间戳信息到日志文件,并将 `curl` 的输出同时打印到控制台和日志文件。 - **错误处理**:使用 `2>&1` 捕获标准错误输出,并与标准输出合并后通过 `tee` 写入日志文件[^4]。 #### 使用方法: 1. 将上述代码保存为 `upload_config.sh`。 2. 修改脚本权限以使其可执行: ```bash chmod +x upload_config.sh ``` 3. 执行脚本: ```bash ./upload_config.sh ``` #### 注意事项: - **安全性**:避免在脚本中硬编码敏感信息(如密码),建议使用环境变量或交互式输入方式替代。 - **XML 格式验证**:确保 XML 字符串格式正确,否则可能导致服务器解析失败。 - **网络设备兼容性**:确认目标设备接口支持 XML 格式的 POST 请求,并设置正确的 `Content-Type` 头部[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值