Shell定义

Shell 是一个命令解释权,它为用户提供了一个向 Linux 内核发送请求以便运行程序界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序

变量

  • 定义变量:变量名=变量值,等号两侧不能有空格,变量名一般习惯用大写。
  • 删除变量:unset 变量名 。
  • 声明静态变量:readonly 变量名,静态变量不能unset。
  • 使用变量:$变量名

将命令返回值赋给变量:A=`ls` 或 A=$(ls) 反引号,执行里面的命令

环境

  • export 变量名=变量值,将 Shell 变量输出为环境变量。
  • export 变量名=$变量名:变量值,在原变量中追加变量值。
  • source 配置文件路径,让修改后的配置信息立即生效。
  • echo $变量名,检查环境变量是否生效

参数

  • $n :$0 代表命令本身、$1-$9 代表第1到9个参数,10以上参数用花括号,如 ${10}。
  • $* :命令行中所有参数,且把所有参数看成一个整体。
  • $@ :命令行中所有参数,且把每个参数区分对待。
  • $# :所有参数个数。

条件判断

命令 [ condition ] 注意命令后面有空格、condition前后要有空格。非空返回0,0为 true,否则为 false

#!/bin/baship=$1
usr="hnhuangjingyu"
pswd="123"echo -e "Hi~ \n欢迎来到我的家HOME -> $HOME"    //-e 会识别\nval=`pwd`
echo "你在$val 这里路径干嘛?"if [ $val = $HOME ];thenecho "原来在我家~"
elseecho " nonono!!! \n快来我家玩  !"
firead  -p "给我一个数字:" a
echo -n "再来一个:"      #不换行输出
read bif [ $a = $b ];thenecho "$a == $b"
elif [ $a -gt $b ];thenecho "$a > $b !!"
elif [ $a -lt $b ];thenecho "$a < $b !!"
fifor i in "$*"
doecho "参数 -> $i"
doneSUM=0
for ((i=0;i<=100;i++))
doSUM=$[$SUM+$i]echo "当前充电 $SUM"
done

函数

#!/bin/bashfunction getSum(){SUM=$[$n1+$n2]echo "sum=$SUM"
}   read -p "请输入第一个参数n1:" n1
read -p "请输入第二个参数n2:" n2# 调用 getSum 函数
getSum $n1 $n2

文件操作

#!/bin/bash#如果文件夹不存在,创建文件夹
if [ ! -d "/myfolder" ]; thenmkdir /myfolder
fi# -f 参数判断 $file 是否存在
if [ ! -f "$file" ]; thentouch "$file"
fi

在命令中切换路径操作

#!/bin/bashpushd ./source  #进入当前目录的source目录make                  #在source目录下执行make
popd                        #返回原目录

Expect定义

expect 是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。

使用场景

在实际工作中,我们运行命令、脚本或程序时,这些命令、脚本或程序都需要从终端输入某些继续运行的指令,而这些输入都需要人为的手工进行。而利用 expect,则可以根据程序的提示,模拟标准输入提供给程序,从而实现自动化交互执行

安装

一般情况下默认会有—apt install expect

命令

  • spawn 交互程序开始后面跟命令或者指定程序
  • expect 获取匹配信息匹配成功则执行expect后面的程序动作
  • send exp_send 用于发送指定的字符串信息
  • exp_continue 在expect中多次匹配就需要用到
  • send_user 用来打印输出 相当于shell中的echo
  • exit 退出expect脚本
  • eof expect执行结束 退出
  • set 定义变量
  • puts 输出变量
  • set timeout 设置超时时间

使用

# Execute an expect script from a file:
expect path/to/file
# Execute a specified expect script:
expect -c "commands"

匹配符

* 匹配任何字符串,包括空null字符串
? 匹配任意单个字符
[chars] 匹配chars中指定的字符集合,比如[A-Za-z]匹配所有字母,再比如[abc]匹配abc三个字符中的任意
\x 匹配字符x,提供了一种防止特殊字符转义的匹配方法,比如\可以匹配反斜杠这个字符,?可以匹配问号,可以匹配

示例

  • 连接远程服务器

demo.sh

#!/usr/bin/expect
spawn ssh hnhuangjingyu@10.211.55.5   #通过spawn执行解释器命令expect "password" #从控制台读取“password”字符串
send "123\n"  #得到回应后就发送“123”字符串
expect eof  #标志expect结束 释放控制流

使用shell脚本改写(易于脚本扩展)

#!/bin/bash
pswd="123"/usr/bin/expect <<-EOF  #使用expect脚本执行由 <<-EOF EOF 包裹起来的语句
set time 10
spawn ssh hnhuangjingyu@10.211.55.5
expect "password"
send "123\n"
expect eof
EOF

运行:

tmp » ./demo.sh                                                                             ~/tmp
spawn ssh hnhuangjingyu@10.211.55.5 #通过spawn执行解释器命令
hnhuangjingyu@10.211.55.5's password:
Permission denied, please try again.  #成功输入123密码
hnhuangjingyu@10.211.55.5's password: %

那么自动化的登录sh脚本为如下:

#!/usr/bin/expect
set timeout 5set ip  [lindex $argv 0]
set user "hnhuangjingyu"
spawn ssh $user@$ip
expect {"(yes/no)?"  {send "yes\n";exp_continue}"password:"  {send "123\n"}
}
interact

!请不要尝试在bash里面嵌入执行expect用来登录ssh,它会无法人机交互

linux sh解释器相关推荐

  1. Shell-/bin/bash和/bin/sh解释器的误用引起的脚本语法错误

    文章目录 生猛干货 背景 问题分析 解决办法 知识点回顾 搞定Linux核心技术 生猛干货 从系统安装到程序员必备的Linux技能,还原真实工作场景,手把手带你实战演练 背景 下面的脚本,在Linux ...

  2. OhMyZsh是一款开源工具,可以用于管理Zsh(Linux命令解释器的一种)的配置

    最近在研究终端工具的时候,发现人家的终端可以输出各种彩色文字,还有各种提示,自己就算用了炫酷的Tabby也无法实现.后来发现需要在Linux上安装OhMyZsh才行,今天给大家介绍下这款功能强大,插件 ...

  3. Linux~Sh脚本一点自己的总结

    从.netCore开源项目来看,eShopOnContainers来说,它的部署是跨平台的,可以部署在linux,docker上,在linux上运行它也可以写一些集成的小脚本,这是微信工程师为我们提供 ...

  4. Linux批量复制文件夹里的文件到另一个文件夹(问题:linux sh: /bin/cp: Argument list too long )

    cp -Rf 原文件夹路径 目标文件夹路径 例子: cp -Rf /home/src/* /home/tar/ 原文件夹路径:/home/src/* (加上 * 表示 /home/src/下的所有文件 ...

  5. linux如何编写.sh脚本,linux sh脚本编写奇刃

    linux sh脚本编写奇刃 发布时间:2020-05-03 来源:脚本之家 点击: 其原理就是当您设定一个控制项的TabIndex为0时,原来TabIndex为0的控制项,TabIndex就变成了1 ...

  6. linux sh命令简述

    linux sh命令简述 1. 可能需要的执行方式 linux下执行.sh文件的方法 2. 开头:#!/bin/sh 3. 变量 4. Shell命令和流程控制 Unix命令 概念:管道,重定向和ba ...

  7. 【Linux】一步一步学Linux——sh命令(225)

    00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 附录 01. 命令概述 sh命令是shell命令语言解释器,执行命令从标准输入读取 ...

  8. linux sh 编程,Linux shell 编程入门

    shell 编程概念 (1) shell是一种命令行解释器,外壳有很多种类 (2) shell 看成是Linux内核和用户沟通的桥梁,用户默认不能直接操作内核 (3)可以通过shell外壳去操作,用户 ...

  9. linux .sh文件详解,干货讲解之Linux Shell编程

    原标题:干货讲解之Linux Shell编程 Shell 教程 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. She ...

最新文章

  1. 关于定于如何弄的漂亮点
  2. Lesson 14.3 Batch Normalization综合调参实战
  3. range与enumerate的区别
  4. shell脚本中的括号和实例
  5. Java泛型中的通配符?
  6. Spanning-tree Potocol(整理)
  7. 双目摄像头 三维坐标 python_时间编码单像素三维成像:挑战三维成像的速度极限...
  8. 【数据结构与算法】之判断字符是否唯一
  9. 服务器不稳定 如何让百度重新收录网站,教你如何让百度重新收录首页
  10. leetcode 198 动态规划
  11. 悟空 mobile.php,悟空CRM无需任何权限的SQL注入漏洞2(ThinkPHP特性)
  12. 倍增(LCA与ST表)
  13. 配置vue前端服务器及express服务器端的服务器同时运行——concurrently
  14. H3C模拟器配置VLAN
  15. 欧拉回路和Hanmilton回路
  16. 华三模拟器HCL常用命令
  17. 【加密技术】Java加密算法
  18. 给你的AppImage创建桌面快捷方式
  19. 狼行千里吃肉,马行千里吃草(我读了5遍,震撼了!)
  20. 信号一会有 一会显示无服务器,为什么有时手机信号差?原来是因为这些原因!...

热门文章

  1. uni-app——storage的使用(Storage、StorageSync)
  2. SQL的多条件查询语句
  3. IT运维服务的主要内容
  4. OneNote 找回误删除笔记
  5. ubuntu美化及解决使用zsh后无法运行ROS
  6. IEC61131-3标准的基本概念和定义
  7. js中根据特定字符截取字符串
  8. 1761:神奇的口袋(2)
  9. Openwrt-USB网络共享
  10. roc曲线spss怎么做_SPSS单因素ROC曲线及多因素联合诊断ROC曲线绘制(原创手把手) - 医学统计和生物统计讨论版 -丁香园论坛...