您的位置:首页 > 运维架构 > Shell

初识Shell

2016-09-01 17:40 127 查看
1.什么是Shell? shell处于kernel的外层,用来负责接收使用者输入的命令,然后将命令解释成kernel能了解的方式,然后由kernel去执行,再将结果传回默认的输出周边。shell是一种命令解释器,同时也是一个程序语言。shell有很多种,在众多的Linux发行版中,标准的shell是bash,也是我们学习的主要对象。 2.shell程序的基本组成结构 shell结构大体是由设定变量、内置命令、shell的语法结构、函数组成。使用实例说明:test.sh1. #!/bin/bash2. #说明使用/bin/bash作为这个脚本的解释器3. 4. #定义一个函数5. function my_fun () {6. echo "Hello, $1,today is $2"7. }8. 9. #定义连个变量10. name=$111. today=`date`12. 13. #函数调用14. my_fun "$name" "$today"
上面的这个脚本要想运行还需要做一些操作,首先给予执行权限chmod +x test.sh然后执行./test.sh willis输出Hello, willis,today is Tue Jun 1 14:51:46 CST 2010 3.父shell和子shell 在执行script之前,身处的环境就是父shell。执行script之时,父shell根据#!/bin/bash,fork出来一个新的shell环境,然后在子shell中执行,执行完毕后子shell结束,任然回到父shell中,这样不会影响到父shell的环境。 4.login shell 和non-login shell

这张图片是login shell的流程,当是non-login shell时,只执行方框中的标注的部分。由这张图我们可以知道,在如下几种情况下,执行的流程。4.1登陆(login)/etc/profile~/.bash_profile4.2注销(logout)~/.bash_logout
5.Shell交互方式5.1自动交互方法一
自动交互最关键的就是交互信息的自动输入,首先联想到文件重定向,在shell编程中有这样一种用法"command << delimiter (分隔符) 从标准输入中读入,直至遇到delimiter分隔符。"
重定向操作符command << delimiter是一种非常有用的命令,shell将分界符delimiter之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符, shell就知道输入结束了。最常见的delimiter分界符是EOF,当然完全可以自定为其他字符。
例:磁盘自动分区脚本
#!/bin/bash
fdisk $1 << EOF
nP1(空格)+1G wEOFmkfs.xfs /dev/vdb1 自动修改用户密码脚本#!/bin/bashpasswd $1 << EOFwilliswillisEOF5.2自动交互方法二
这时候联想到交互信息的另一个自动输入方法:管道,通过echo + |
例:自动修改用户密码脚本
#!/bin/bash
(echo "redhat"
sleep 1
echo "redhat" )|passwd 自动分区#!/bin/bashecho 'np1 +1Gw '| fdisk $1mkfs.xfs /dev/vdb15.3自动交互方法三
expect就是一个专门用来实现自动交互功能的工具,expect的语法可以参考相关资料,代码如下:
自动切换到root用户
#!/usr/bin/expect
spawn su root
expect "password: "
send "willis\r"
expect eof
exit

测试通过,运行这个脚本,直接从当前用户登录到root用户。

Shell交互式方法总结:
方法一(重定向)简单直观,也经常有实际应用,但是在自动交互领域功能有限。
方法二(管道)也很简单直观,有时甚至不用sleep配合就能展现强大的自动交互实力
方法三(expect)在功能上是最为强大的,expect本来就是为实现自动交互功能而生,但是缺点是需要安装expect包,在嵌入式等环境下难以安装。
三个方法各有优劣,应用的好,都可以完成Linux Shell自动交互
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Shell 交互