linux sh解释器
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中的echoexit
退出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解释器相关推荐
- Shell-/bin/bash和/bin/sh解释器的误用引起的脚本语法错误
文章目录 生猛干货 背景 问题分析 解决办法 知识点回顾 搞定Linux核心技术 生猛干货 从系统安装到程序员必备的Linux技能,还原真实工作场景,手把手带你实战演练 背景 下面的脚本,在Linux ...
- OhMyZsh是一款开源工具,可以用于管理Zsh(Linux命令解释器的一种)的配置
最近在研究终端工具的时候,发现人家的终端可以输出各种彩色文字,还有各种提示,自己就算用了炫酷的Tabby也无法实现.后来发现需要在Linux上安装OhMyZsh才行,今天给大家介绍下这款功能强大,插件 ...
- Linux~Sh脚本一点自己的总结
从.netCore开源项目来看,eShopOnContainers来说,它的部署是跨平台的,可以部署在linux,docker上,在linux上运行它也可以写一些集成的小脚本,这是微信工程师为我们提供 ...
- Linux批量复制文件夹里的文件到另一个文件夹(问题:linux sh: /bin/cp: Argument list too long )
cp -Rf 原文件夹路径 目标文件夹路径 例子: cp -Rf /home/src/* /home/tar/ 原文件夹路径:/home/src/* (加上 * 表示 /home/src/下的所有文件 ...
- linux如何编写.sh脚本,linux sh脚本编写奇刃
linux sh脚本编写奇刃 发布时间:2020-05-03 来源:脚本之家 点击: 其原理就是当您设定一个控制项的TabIndex为0时,原来TabIndex为0的控制项,TabIndex就变成了1 ...
- linux sh命令简述
linux sh命令简述 1. 可能需要的执行方式 linux下执行.sh文件的方法 2. 开头:#!/bin/sh 3. 变量 4. Shell命令和流程控制 Unix命令 概念:管道,重定向和ba ...
- 【Linux】一步一步学Linux——sh命令(225)
00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 附录 01. 命令概述 sh命令是shell命令语言解释器,执行命令从标准输入读取 ...
- linux sh 编程,Linux shell 编程入门
shell 编程概念 (1) shell是一种命令行解释器,外壳有很多种类 (2) shell 看成是Linux内核和用户沟通的桥梁,用户默认不能直接操作内核 (3)可以通过shell外壳去操作,用户 ...
- linux .sh文件详解,干货讲解之Linux Shell编程
原标题:干货讲解之Linux Shell编程 Shell 教程 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. She ...
最新文章
- 关于定于如何弄的漂亮点
- Lesson 14.3 Batch Normalization综合调参实战
- range与enumerate的区别
- shell脚本中的括号和实例
- Java泛型中的通配符?
- Spanning-tree Potocol(整理)
- 双目摄像头 三维坐标 python_时间编码单像素三维成像:挑战三维成像的速度极限...
- 【数据结构与算法】之判断字符是否唯一
- 服务器不稳定 如何让百度重新收录网站,教你如何让百度重新收录首页
- leetcode 198 动态规划
- 悟空 mobile.php,悟空CRM无需任何权限的SQL注入漏洞2(ThinkPHP特性)
- 倍增(LCA与ST表)
- 配置vue前端服务器及express服务器端的服务器同时运行——concurrently
- H3C模拟器配置VLAN
- 欧拉回路和Hanmilton回路
- 华三模拟器HCL常用命令
- 【加密技术】Java加密算法
- 给你的AppImage创建桌面快捷方式
- 狼行千里吃肉,马行千里吃草(我读了5遍,震撼了!)
- 信号一会有 一会显示无服务器,为什么有时手机信号差?原来是因为这些原因!...
热门文章
- uni-app——storage的使用(Storage、StorageSync)
- SQL的多条件查询语句
- IT运维服务的主要内容
- OneNote 找回误删除笔记
- ubuntu美化及解决使用zsh后无法运行ROS
- IEC61131-3标准的基本概念和定义
- js中根据特定字符截取字符串
- 1761:神奇的口袋(2)
- Openwrt-USB网络共享
- roc曲线spss怎么做_SPSS单因素ROC曲线及多因素联合诊断ROC曲线绘制(原创手把手) - 医学统计和生物统计讨论版 -丁香园论坛...