shell -n -x
时间: 2023-10-19 21:09:37 浏览: 102
shell中的-n和-x选项是用于调试shell脚本的。其中,-n选项只读取shell脚本,但不实际执行;而-x选项则进入跟踪方式,显示所执行的每一条命令。但是,-x选项输出的调试信息仅限于进行变量替换之后的每一条实际执行的命令以及行首的一个"+"号提示符,缺少行号等重要信息,对于复杂的shell脚本的调试来说,还是非常不方便的。因此,我们可以利用shell内置的一些环境变量来增强"-x"选项的输出信息,以便更好地调试shell脚本。
相关问题
if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then [ -x /usr/bin/id ] || return ID=`/usr/bin/id -u` [ -n "$ID" -a "$ID" -le 200 ] && return # for bash and zsh, only if no alias is already set alias vi >/dev/null 2>&1 || alias vi=vim fi
这段代码是一个 shell 脚本中的条件语句块,用于检查当前是否在 Bash、Ksh 或 Zsh 环境中运行,并执行相应的操作。
这段代码的含义如下:
1. `if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then`:检查是否在 Bash、Ksh 或 Zsh 环境中运行。
2. `[ -x /usr/bin/id ] || return`:检查 `/usr/bin/id` 是否可执行,如果不可执行,则终止脚本。
3. `ID=`/usr/bin/id -u``:获取当前用户的用户 ID。
4. `[ -n "$ID" -a "$ID" -le 200 ] && return`:检查用户 ID 是否存在且小于等于 200,如果是,则终止脚本。
5. `alias vi >/dev/null 2>&1 || alias vi=vim`:检查是否已经定义了别名 `vi`,如果没有,则将 `vi` 设置为 `vim` 的别名。
这段代码的作用是在 Bash、Ksh 或 Zsh 环境中执行一些特定操作,例如设置别名和条件限制。具体的操作根据你的需求和环境来确定。
import paramiko import openpyxl # 读取Excel中的账号和密码信息 wb = openpyxl.load_workbook('/root/hosts.xlsx') sheet = wb.active # 连接至Linux主机 # values_only=True ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) for row in sheet.iter_rows(min_row=2,values_only=True): username = row[0] password = row[1] host = row[2] ssh.connect(hostname=host, username=username, password=password, port=22) # 执行脚本 stdin, stdout, stderr = ssh.exec_command(''' #!/bin/bash NAME=$(uname -n) if [ -x "$(command -v mysql)" ]; then echo "MySQL is installed" fi if [ -x "$(command -v oracle)" ]; then echo "Oracle is installed" fi if [ -x "$(command -v postgres)" ]; then echo "PostgreSQL is installed" fi if [ -x "$(command -v mongo)" ]; then echo "Mongo is installed" fi if [ -x "$(command -v redis-cli)" ]; then echo "Redis is installed" fi if [ ! -x "$(command -v mysql)" ] && [ ! -x "$(command -v oracle)" ] && [ ! -x "$(command -v postgres)" ] && [ ! -x "$(command -v mongo)" ] && [ ! -x "$(command -v redis-cli)" ]; then echo "No supported database is installed" ''') # 收集查询结果并反馈 output = stdout.read().decode() print(host+"\n"+output) # 关闭连接 ssh.close() 这个python脚本无法检测Oracle,但是里面的shell脚本单独执行可以检测Oracle
这可能是由于在Python脚本中使用了双引号,导致Oracle命令被解析成了变量。可以尝试将双引号改成单引号或者使用转义符号来解决这个问题,例如:
```
if [ -x "$(command -v 'oracle')" ]; then
```
或者
```
if [ -x "$(command -v \"oracle\")" ]; then
```
阅读全文