Expect 远程执行检查函数

需安装 expect 才能正常使用。

yum install -y expect;
#!/usr/bin/env bash
#expect 功能检查
set -e;

EXPECT_CHECK(){
  local EXUSR=${1}
  local EXHOST=${2}
  local EXPWD=${3}
  #ssh test
  EXP_RST=`
    expect -c "
      set timeout 300
      spawn ssh ${EXUSR}@${EXHOST} echo PASS
      expect {
        not known {send_user [exec echo -e Erro:Host not known\n];exit}
        Connection refused {send_user [exec echo -e Erro:Connection refused\n];exit}
        (yes/no)? {send yes\r;exp_continue}
          password: {send ${EXPWD}\r;exp_continue}
        Permission denied {send_user [exec echo -e Erro:Wrong passwd\n];exit}
      }
    "|grep -E 'PASS|Erro'|grep -v echo|sed 's/\r//g;s/\n//g'
  `
  if [[ ${EXP_RST} && ${EXP_RST} == PASS ]]; then
    echo -e "\nEXPECT CHECK COMPLETE!\n";
    return 0;
  else
    echo -e "\n${EXUSR}@${EXHOST} EXPECT CHECK ERROR!\n";
    echo -e "\n${EXP_RST}\n";
    return 1;
  fi
}

Bash 脚本编程基础及示例

简介

Bash(Bourne Again Shell)是当前 Linux 系统默认的,在 sh(Bourne Shell)的基础上进行扩展,并代替 sh 的一种 CLI(command-line interface)工具。

由于 bash 本身就是 Linux 上的命令语言,所以 bash 编程有着得天独厚的优势:所有在 bash 编程中用到的语句,都可以在命令行中执行。换句话说,就是 bash 编程,其实就是按条件堆积 linux 命令的过程。这也很好地解释了 Linux 是由众多功能单一程序组成的这种哲学思想。

继续阅读

Bash 用户交互之 read

前言

我们说过Linux的哲学思想之一就是“尽量避免跟用户交互”(详见《magedu pro 第一周作业》),但这种哲学思想更多的是用在命令的执行上,对于我们的脚本及程序设计来说,有些交互还是很有必要的。

之前介绍过使用 whiptail 来进行对话框式的交互(详见《如何在交互式 shell 脚本中创建对话框 》),确实使用 whiptail 能够更直观地让用户进行交互,功能也比较强大,但是如果只是实现一些简单的交互,使用 whiptail 就不太必要了,这时候我们可以使用轻量级的交互方式,那就是 read

继续阅读

glob 及 grep 正则表达式简介

简介

命题的正确解读应为 glob | 及 | grep正则表达式 | 简介 ,因为 glob 通配符并不能算是正则表达式,放在一起只是因为它们的作用相似。

正则表达式(Regual Expression),由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能。这类特殊字符也就是接下来要详解的字符叫元字符。

继续阅读

Bash 变量、配置及测试运算简介

bash 变量说明

根据变量的生效范围为标准:

  • 本地变量:生效范围为当前 shell 进程,对当前 shell 进程之外的进程或当前 shell 的子进程和父进程均无效。
  • 环境变量:生效范围为当前 shell 进程及其子进程。
  • 局部变量:生效范围为当前 shell 进程中某代码片段(函数)。
  • 位置变量: $1$2$3 等来表示,用于让脚本在脚本代码中调用通过外部脚本或命令行传递给它的参数。
  • 特殊变量: $?$0$*$@$# 等来表示,系统自带用户存储特殊数据。

继续阅读