shell脚本如何重复执行命令?

expect是用来实现自动交互功能的工具之一,使用expect-send来实现交互过程。

2、向一个脚本传递参数时,bash shell是使用$1,$2...来接收参数的;而expect则将脚本的执行参数保存在数组$argv中,在脚本中一般将其赋值给变量:set 变量名 [lindex $argv 参数]

# 进入指定的机器后,就可执行相应的命令或者脚本

注意:若登陆后便退出远程终端,则写expect eof即可。

很多时候,需要用expect命令实现登录远端服务器执行简单命令,诸如:重启服务器,ftp,ls, scp等命令。 里面涉及到输入密码的交互式场景,这个时候expect命令的巨大功效就出来了,下面是一个比较经典脚本实现:

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

}

1.Shell的作用及常见种类

Shell是一个特殊的应用程序,它介于操作系统内核与用户之间,负责接收用户输入的操作指令并进行解释,将需要执行的命令交给内核执行。

查看当前Linux系统中能够使用的shell程序的列表

确认shell程序中存在的部分链接文件(tcsh是csh的兼容升级版本)

切换至tcsh程序的shell环境,并验证是否还能使用help内部指令和外部命令ls

更改用户自己登录的shell

由管理员更改其他用户的登录shell(使用usermod s命令)

命令历史是bash中用于提高命令输入效率的一项功能,能够让用户快速地重复执行已经输入过的命令,减少重复输入工作

使用!wh调用历史命令中最近一次以wh开头的命令并执行

查看用户最后执行的三条历史命令记录

通过“!序号”的形式执行用户历史命令列表中第15条命令

将用户zhangsan的历史命令记录的条数设置为5,重新选择后确认效果

查看已设置的所有命令别名

使用预设的别名“ll”实现ls l命令的功能

取消已设置的dir命令别名(unalias a取消用户当前环境下已设置的所有命令别名)

标准输入默认的设备是键盘,文件编号为0,

标准输出默认的设备是显示器,文件编号为1

标准错误默认的设备是显示器,文件编号为2,

变更输出内容的方向,叫做“重定向”

查看zhangsan用户的身份信息,并将输出结果保存到文件idzs.txt中

“>”重定向符后面的指定文件如果不存在,则会建立新文件,并将命令结果保存到该文件中,它将会覆盖文件原有内容

“>>重定向符可以将命令执行的结果追加到文件的末尾进行保存,而并不覆盖文件原有内容

查看用户lrn的身份信息,并追加到文件idzs.txt中,不覆盖文件原有内容

标准输入重定向“<若结合stdin命令选项则可以从文件中读取并自动设置密码,省略了交互式的过程

尝试使用help命令查看ls命令的帮助信息,由于ls并非内部命令,系统将会报错,通过2>操作符可以将报错信息重定向到指定的文件

使用“2>操作符一样会覆盖文件中的内容,若要追加到新的内容到同一个文件,需要使用“2>>”重定向操作符

使用ls命令查看/etc/passwd文件和/etc/shadow文件属性时,输出结果将同时包含标准输出和错误输出,测试进行分别重定向、合并重定向的结果(一个是在不同的文件,另一个是在同一个文件,关键是是否使用“&”

过滤出/etc/inittab文件中不以“#”号开头的行,并再次过滤出非空行,将结果重定向保存为inittab.txt文件中

找出系统中使用bash作为登陆shell,名称以ha开头的用户账号,并只显示出用户名。登陆shell两个字段的内容

查看当前系统的总内存空间,剩余可用内存空间(MB),去除其他无关的信息

常见shell变量的类型用户包括用户自定义变量,环境变量,预定义变量,位置变量

新建一个名为“DAY”的变量,初始内容设置为“Sunday”

通过在变量名称前添加前导符号“$可以引用一个变量内容。若需要在终端输出变量的内容,可以使用echo命令,它可以同时也用于显示用户指定的其它字符串内容

在变量DAY的内容后紧跟“MorningBus”字符串并一起显示

使用单引号时,将不允许在单引号的范围内引用其他变量值$字符将被看成普通字符看待

使用反撇号时,允许将执行特定命令的输出结果赋给变量,反撇号内包含的字串必须是能够执行的命令,执行后会用输出结果替换该命令字串

统计当前登录到本地终端中的用户数量,并将结果保存到变量UserNum中

用一行命令找出安装了fdisk程序的软件包名称(需要先确定fdisk程序的文件位置)

通过find命令找出系统中lrn用户留下的文件或目录,并使用rm命令将其删除

在使用嵌套使用命令替换操作时,反撇号将力所不能及,这时可以将反撇号用$()来代替

下面使用一行命令,将上一个例子的输出结果保存到变量FdiskPKG中

除了上述赋值操作以外,还可以使用Bash的内置命令read来给变量赋值

从键盘输入一整行数据,赋值给变量hello,并确认hello变量的内容

从键盘输入一整行数据,依次赋值给变量G1 G2,并确认其内容

从键盘输入一整行数据,并给出相应的提示信息

对于用户自定义变量,默认情况下只能在当前的shell环境下使用,因此称为“局部变量”,局部变量在新开启的子shell环境中时无效的

在当前shell环境中定义一个变量FILESVR,开启一个新的子shell进程,处于子shell环境时将无法使用变量中的内容

为了使用户定义的变量在所有的子shell环境中能够继续使用,减少重复设置工作,可以使用export命令将制定的变量设置为“全局变量”

确认变量FILESVR的内容,并将其设置为全局变量,在子shell,当前shell中验证

Export命令还可以在输出变量的同时对指定名称的变量进行赋值(创建),这样在使用export命令之前就不需要单独为变量进行赋值

清除自定义变量,可以用unset命令对已定义的用户变量进行

清除,指定一个或多个变量名称作为参数即可

计算变量X的值与数值123的和,并将计算结果重新赋值给变量X

环境变量是指用户登录后linux系统预先设定好的一类shell变量,其功能是设置用户的shell工作环境,包括用户宿主目录,命令查找路径、用户当前目录、登录终端等

以分号分隔,显示当前的用户名、宿主目录、登录shell

确认当前搜索路径,并将/opt/bin目录添加到现有的搜索路径中去

在当前用户环境中,将用于限制历史命令的条数的环境变量HISTSIZE的值改为24

编辑~、。Bash_profile文件,修改PATH的设置,以便用户在下次的登录后能够使用/opt/bin目录作为默认搜索路径

预定义变量,用户只能使用预定义变量,而不能创建新的预定义变量

$#表示命令行中位置参数的数量

$*表示所有位置参数的内容

$?表示命令执行后返回的状态0表示命令正确

$$表示当前进程的进程号

$!表示后台运行的最后一个进程的进程号

$0表示当前执行的进程的进程名

编写并执行shell脚本

包括运行环境设置,注释行,可执行语句

使用一个vi编辑器编写一个简单的shell脚本文件reboot.sh,用于报告当前系统中/boot目录中所占用的空间大小,并列出其中内核文件的属性信息

为脚本文件添加可执行权限

直接执行带x权限的脚本文件

使用shell解释器执行脚本

使用bash解释器手动加载执行reboot.sh脚本文件中的语句

Shell脚本应用实例

由于公司的文件服务器空间有限,需要完成定期任务,即在每周五下班前(17:30)检查公共共享目录/var/ftp/pub中的内容,将其中所有子目录及文件的详细列表和当时的时间信息追加保存到/var/log/pubdir.log日志文件中,然后清空该目录中的内容

编写脚本文件ftpclean.sh,并添加执行权限

设置计划任务并确认crond服务已经启动(执行crontab e命令)

}

我要回帖

更多关于 linux执行脚本 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信