Shell 学习
  5SL1O36RFEWc 2023年11月02日 37 0

Shell 简介

什么是shell

shell 本质上是 linux 命令,一条一条命令组合在一起,实现某一个目的,就变成了shell脚本。它从一定程度上 减轻了工作量,提高了工作效率。

官方化的shell 介绍

Shell 通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出,简单来说Shell就是一个用户跟操作系统之间的一个命令解释器。

常见的shell

Bourne Shell(/usr/bin/sh或/bin/sh)
        Bourne Again Shell(/bin/bash)
        C Shell(/usr/bin/csh)
        K Shell(/usr/bin/ksh)
        Shell for Root(/sbin/sh)

最常用的shell是Bash,也就是Bourne Again Shell。Bash由于易用和免费,在日常工作中被广泛使用,也是大多数Linux操作系统默认的Shell环境。

Shell 程序编程流程控制语句

if条件语句

if 条件语句

# If条件判断语句,通常以if开头,fi结尾。也可加入else或者elif进行多条件的判断

# 单分支语句 ---比较大小
        if (条件表达式);then
                语句1
        fi

# 双分支if 语句
        if (表达式)
                语句1
        else
                语句2
        fi

# 多支条件语句 ---判断成绩
        if (表达式)
                语句1
        elif
                语句2
        elif
                语句2
        fi

常见逻辑判断运算符

-f                 判断文件是否存在 eg: if [ -f filename ];
-d                 判断目录是否存在 eg: if [ -d dir     ];
-eq                等于,应用于整型比较 equal;
-ne                不等于,应用于整型比较 not equal;
-lt                小于,应用于整型比较 letter;
-gt                大于,应用于整型比较 greater;
-le                小于或等于,应用于整型比较;
-ge         大于或等于,应用于整型比较;
-a                双方都成立(and) 逻辑表达式 –a 逻辑表达式;
-o                单方成立(or) 逻辑表达式 –o 逻辑表达式;
-z                空字符串;
-x      是否具有可执行权限
||      单方成立;
&&      双方都成立表达式。

for循环语句

for 循环语句

#格式:for name [ [ in [ word ... ] ] ; ] do list ; done
  for 变量名 in 取值列表; do
    语句 1
  done

while循环语句

while循环语句

# While循环语句与for循环功能类似,主要用于对某个数据域进行循环读取、对文件进行遍历,通常用于需要循环某个文件或者列表,满足循环条件会一直循环,不满足则退出循环,其语法格式以while…do开头,done结尾与 
#while 关联的还有一个 until 语句,它与 while 不同之处在于,是当条件表达式为 false 时才循环,实际使用中比较少,这里不再讲解。

while  (表达式)
do
  语句1
done

Break 和continue语句

# break 和 continue 语句
  break 是终止循环。
  continue 是跳出当前循环。
#示例 1:在死循环中,满足条件终止循环
while true; do
  let N++
  if [ $N -eq 5 ]; then
    break
fi
  echo $N
done
输出: 1 2 3 4

#示例 2:举例子说明 continue 用法
N=0
while [ $N -lt 5 ]; do
  let N++
if [ $N -eq 3 ]; then
  continue
fi
  echo $N
done

输出: 1 2 4

# 打印 1-100 数字
i=0
while ((i<=100))
do
        echo  $i
        i=`expr $i + 1`
done

case esac选择语句

case...esac与switch...case 语句类似,是一种多分支选择结构

case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令。

case 值 in
模式1)
    command1
    command2
    command3
    ;;
模式2)
    command1
    command2
    command3
    ;;
*)
    command1
    command2
    command3
    ;;
esac

case工作方式如上所示。取值后面必须为关键字 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后。 取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。 下面的脚本提示输入1到4,与每一种模式进行匹配:

#!/bin/bash

echo 'Input a number between 1 to 4'echo -e 'Your number is:\c'
read aNum
case $aNum in1) echo 'You select 1'
    ;;
    2) echo  'You select 2'
    ;;
    3) echo 'You select 3'
    ;;
    4) echo 'You select 4'
    ;;
    *) echo 'You do not select a number between 1 to 4'
    ;;
esac

linux shell 脚本 入门到实战详解

select选择语句

Linux expect使用

linux expect的使用

Linux技巧(五):expect安装与介绍

expect 介绍:是一种扩展性语言,主要完成系统交互方面的功能,比如SSH、FTP 等,这些程序都要手工与它们进行互动,而使用expect 就可以模拟人手工互动的过程,使用一种自动的方式控制。

expect 常用命令:

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

expect 中,有三个重要的主命令,分别是spawn、expect、exp_send

spawn 命令

spawn 命令是expect的初始命令,它用于启动一个进程,例如:

spawn ssh root@172.31.3.80

expect 命令用于等候一个相匹配的输出,一旦匹配就执行后面的动作,这个命令接受几个特有的参数,用的最多的就是-re,表示使用正则表达式的方式匹配,例如:

spawn ssh root@172.31.3.80

expect "password:" {exp_send "root\r"}

从上面的例子可以看出,expect是依附与spawn命令的,当执行ssh命令后,expect就匹配命令执行后的关键字:password:,如果匹配到关键字就会执行后面包含在{}括号中的exp_send动作,匹配以及动作可以放在二行,这样就不需要使用{}括号了,就像下面这样,实际完成的功能与上面是一样的:

spawn ssh root@192.168.0.1

expect  “password:”

exp_send “word\r”

expect命令还有一种用法,它可以在一个expect匹配中同时匹配多个关键字,只需要将关键字放在一个大括号中就可以了:

spawn  ssh  root@192.168.0.1

expect  {

   -re  “password:” {exp_send  “word\r”}

   -re  “TopsecOS#” { }

Set 设置 expect变量

set 变量名 #读取变量的方法 
puts $变量名 #读取变量的方法

例子:

#!/usr/bin/expect -f  #注:这里的-f不是必须
set timeout 30
spawn ssh root@127.0.0.1
expect {   #注:关键字与大括号之间有个空格
"yes/no"  {send "yes\r" ; exp_continue }
"password:" {send "root\r" }
}
interact

解释:

1. [#!/usr/bin/expect]   
    这一行告诉操作系统脚本里的代码使用哪一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。   
注意:这一行需要在脚本的第一行。   
2. [set timeout 30]     
    设置超时时间的,现在你只要记住他的计时单位是:秒   
    注:如果设置为-1,不予超时
3. [spawn ssh root@127.0.0.1]    
    spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。   它主要的功能是给ssh运行进程加个壳,用来传递交互指令。   
4. [expect "password:"]   
    expect {
    "yes/no" { send "yes\r" ;exp_continue}
    "password:" { send "123456\r"}
    }
    这里的expect也是expect的一个内部命令,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。
    这个命令的意思是判断上次输出结果里是否包含“yes/no”的字符串,如果有则立即通过send返回一个值,继续判断是否带有password字符串 有则通过send返回一个值 ,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒   
5. [send "root\r"]   
    这里就是执行交互动作,与手工输入密码的动作等效。   
    温馨提示: 命令字符串结尾别忘记加上 “\r”,如果出现异常等待的状态可以核查一下。
6. [interact]    
    执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。

log_file

log_file 命令用来将输出记录到一个文件中去。格式:

log_file <选项> 文件名

选项包括下面几种

-open 当一个文件已经被打开时,使用这个选项可以往这个文件里继续添加内容,这个选项一般用于windows系统,因为windows系统中文件是独占的,Linux系统中就不存在这个问题了。

-leaveopen 当文件已经被打开时,不继续向这个文件中添加内容。

-noappend 如果文件已存在,那么清空文件中的内容,然后再写入。

Linux screen 命令

screen //创建终端
# screen vi ~/main.c //创建 screen 终端 ,并执行 vi命令
再终端下,按下Ctrl+a //离开screen 终端

screen -ls //显示已创建的screen 终端
screen -r 2276 //连接screen_id 为 2276 的screen 终端


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  Pq37jUF4UeqZ   2023年11月02日   39   0   0 Shell
  5SL1O36RFEWc   2023年11月02日   40   0   0 Shell虚拟化服务器
  llt0tXqeaug8   2023年11月19日   19   0   0 文件名Shell
  cnCTZTo8tgOC   2023年11月02日   61   0   0 包装类java整型
  5SL1O36RFEWc   2023年11月02日   38   0   0 取值Shell整型
5SL1O36RFEWc
作者其他文章 更多

2023-11-12

2023-11-12

2023-11-12

2023-11-02

2023-11-02

2023-11-02

2023-11-02

2023-11-02