shell脚本编程2及练习
2017-06-19 21:36
696 查看
shell
1.Bash位置参数
有两种简单的方法可以将用户输入读入bash中的变量。第一个方法是使用read提示用户输入(使用-p选项)并将其直接存储到一个或多个变量:
交互式输入
# read -p 'Enter your first and last name: ' FIRST LAST
另一个方法是使用位置参数来读取传递给脚本的命令行参数或选项输入。各种特殊变量存储传递的选项编号
Bash解析的个别参数或整个原始命令行。指定的位置参数总数:$#
位置参数自身:$0、$1、$2、$3....
所有位置参数: $@、$*
练习:输入俩个数,输出两个数之和大于10,还是小于10
练习:查看指定ip主机是否在线
测试:
2. test条件判断
test命令可用于评估bash脚本中的表达式。它评估其参数所指定的表达式,如果表达式为true,返回零退出状态,如果表达式为false,则返回非零退出状态。test具有替代语法,使用方括号"[]"将表达式括起来,这样更易于阅读。
语法:test EXPRESSION 或 [EXPRESSION]
非零或零长度字符串运算符:test -{n|z} STRING
[root@server0 ~]# [ -n westos ] 是否不为空
[root@server0 ~]# [ -z westos ] 是否为空
3.字符串比较运算符:=、!=
[root@server0 ~]# [ abc = abc ] 是否等于
[root@server0 ~]# [ abc != ABC ] 是否不等于
数字比较运算符:-eq、-ne、-lt、-le、-gt、-ge
[root@server0 ~]# [ 1 -eq 1 ] 是否等于
[root@server0 ~]# [ 1 -ne 1 ] 是否不等于
[root@server0 ~]# [ 1 -gt 2 ] 是否大于
4.文件状态运算符:test -{b|c|e|f|d|r|w|x|s|L} FILE/DIRECTORY
[root@server0 ~]# [ -b /dev/sda ] 查看文件是否是块设备
[root@server0 ~]# [ -c /dev/zero ] 查看文件是否是字符设备
[root@server0 ~]# [ -e /etc/passwd ] 查看文件是否存在
[root@server0 ~]# [ -f /etc/passwd ] 查看文件是否是个普通的目录
[root@server0 ~]# [ -d /etc/passwd ] 查看文件是否是个目录
[root@server0 ~]# [ -L /etc/passwd ] 查看文件是否是个软连接
练习:判断文件的类型
测试:
5. 二进制文件运算符:-ef、-nt、-ot
[root@server0 bin]# [ /bin/mount -ef /usr/bin/mount ] 是否互为硬连接
[root@server0 bin]# [ /bin/mount -nt /usr/bin/mount ]
[root@server0 bin]# [ /bin/mount -ot /usr/bin/mount ]
6.逻辑运算符:-o、-a、!、&&、||
[root@server0 bin]# [ 2 -gt 1 -a 1 -gt 2 ]
[root@server0 bin]# [ 2 -gt 1 -o 1 -gt 2 ]
[root@server0 bin]# [ ! 2 -gt 1 ]
7.if语句
if命令检查if后面的命令或列表的退出值。如果第一个命令评估为true/零,则运行then之后的命令列表,直至任一else。如果第一个命令评估为false/非零,则运行else与fi之间的命令列表(反向平写if,标记if块的结束)。
语法:if command; then command; command2; else command3; fi
示例: 编写一个脚本,将一个文件内的用户创建出来,并将密码改为westos,如果用户存在不做任何操作。
测试:
示例: 编写一个脚本,将一个文件内的用户创建出来,并将密码改为westos,如果用户存在不做任何操作。格式为
/nmt/op_user.sh <create| delete> userfile
测试:
8.case语句
case语句 :它能够把变量的内容与多个模板进行匹配,再根据成功匹配的模板去决定应该执行哪
实例:将上面的脚本改为case语句
测试:
9.expect语句
在shell中利用expect实现自动应答脚本。
示例:查看一个文件里记录的ip和密码对应的主机的主机名
测试:
<
4000
span style="font-size:18px;">#!/usr/bin/expect 这一行告诉操作系统脚本里的代码使用那一个shell来执行。
set timeout 10 设置后面所有的expect命令的等待响应的超时时间,单位为秒。
spawn 是expect的内部命令,作用是给后面的shell指令加个壳,用来传递交互指令。
expect "who" 判断上次输出结果里是否包含“who”的字符串,如果有则立即返回,否则等待超时时间后返回。
send "westos\n" 执行交互动作,相当于手工输入"westos"。
expect eof 作用是在输出中搜索文件结束符,如果没有这一行,脚本会立即退出,得不到正确结果。
interact 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。否则退出登录。
$argv 参数数组
expect 脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第
一个,第二个,第三个....参数。
10 .环境变量
shell和脚本使用变量来存储数据 ,有些变量可以连同它们的内容传递给子进程,这些变量我们称之为环境变量。
使用env命令显示所有环境变量
使用set命令现实所有本地定义的shell变量
Bash启动脚本
在用户登录的时候,会运行全局变量文件/etc/profile,和用户自定义变量文件
~/.bash_profile去初始化它们的环境变量.
11. 使用别名
alias命令可以用来自定义属于自己的系统命令,写入~/.bashrc 文件永久生效。
查看别名:# alias
设置别名: alias mycom='echo hello;hostname'
删除别名: unalias mycomm
12 使用函数
示例:
2.
1.Bash位置参数
有两种简单的方法可以将用户输入读入bash中的变量。第一个方法是使用read提示用户输入(使用-p选项)并将其直接存储到一个或多个变量:
交互式输入
# read -p 'Enter your first and last name: ' FIRST LAST
另一个方法是使用位置参数来读取传递给脚本的命令行参数或选项输入。各种特殊变量存储传递的选项编号
Bash解析的个别参数或整个原始命令行。指定的位置参数总数:$#
位置参数自身:$0、$1、$2、$3....
所有位置参数: $@、$*
练习:输入俩个数,输出两个数之和大于10,还是小于10
练习:查看指定ip主机是否在线
测试:
2. test条件判断
test命令可用于评估bash脚本中的表达式。它评估其参数所指定的表达式,如果表达式为true,返回零退出状态,如果表达式为false,则返回非零退出状态。test具有替代语法,使用方括号"[]"将表达式括起来,这样更易于阅读。
语法:test EXPRESSION 或 [EXPRESSION]
非零或零长度字符串运算符:test -{n|z} STRING
[root@server0 ~]# [ -n westos ] 是否不为空
[root@server0 ~]# [ -z westos ] 是否为空
3.字符串比较运算符:=、!=
[root@server0 ~]# [ abc = abc ] 是否等于
[root@server0 ~]# [ abc != ABC ] 是否不等于
数字比较运算符:-eq、-ne、-lt、-le、-gt、-ge
[root@server0 ~]# [ 1 -eq 1 ] 是否等于
[root@server0 ~]# [ 1 -ne 1 ] 是否不等于
[root@server0 ~]# [ 1 -gt 2 ] 是否大于
4.文件状态运算符:test -{b|c|e|f|d|r|w|x|s|L} FILE/DIRECTORY
[root@server0 ~]# [ -b /dev/sda ] 查看文件是否是块设备
[root@server0 ~]# [ -c /dev/zero ] 查看文件是否是字符设备
[root@server0 ~]# [ -e /etc/passwd ] 查看文件是否存在
[root@server0 ~]# [ -f /etc/passwd ] 查看文件是否是个普通的目录
[root@server0 ~]# [ -d /etc/passwd ] 查看文件是否是个目录
[root@server0 ~]# [ -L /etc/passwd ] 查看文件是否是个软连接
练习:判断文件的类型
测试:
5. 二进制文件运算符:-ef、-nt、-ot
[root@server0 bin]# [ /bin/mount -ef /usr/bin/mount ] 是否互为硬连接
[root@server0 bin]# [ /bin/mount -nt /usr/bin/mount ]
[root@server0 bin]# [ /bin/mount -ot /usr/bin/mount ]
6.逻辑运算符:-o、-a、!、&&、||
[root@server0 bin]# [ 2 -gt 1 -a 1 -gt 2 ]
[root@server0 bin]# [ 2 -gt 1 -o 1 -gt 2 ]
[root@server0 bin]# [ ! 2 -gt 1 ]
7.if语句
if命令检查if后面的命令或列表的退出值。如果第一个命令评估为true/零,则运行then之后的命令列表,直至任一else。如果第一个命令评估为false/非零,则运行else与fi之间的命令列表(反向平写if,标记if块的结束)。
语法:if command; then command; command2; else command3; fi
示例: 编写一个脚本,将一个文件内的用户创建出来,并将密码改为westos,如果用户存在不做任何操作。
测试:
示例: 编写一个脚本,将一个文件内的用户创建出来,并将密码改为westos,如果用户存在不做任何操作。格式为
/nmt/op_user.sh <create| delete> userfile
测试:
8.case语句
case语句 :它能够把变量的内容与多个模板进行匹配,再根据成功匹配的模板去决定应该执行哪
实例:将上面的脚本改为case语句
测试:
9.expect语句
在shell中利用expect实现自动应答脚本。
示例:查看一个文件里记录的ip和密码对应的主机的主机名
测试:
<
4000
span style="font-size:18px;">#!/usr/bin/expect 这一行告诉操作系统脚本里的代码使用那一个shell来执行。
set timeout 10 设置后面所有的expect命令的等待响应的超时时间,单位为秒。
spawn 是expect的内部命令,作用是给后面的shell指令加个壳,用来传递交互指令。
expect "who" 判断上次输出结果里是否包含“who”的字符串,如果有则立即返回,否则等待超时时间后返回。
send "westos\n" 执行交互动作,相当于手工输入"westos"。
expect eof 作用是在输出中搜索文件结束符,如果没有这一行,脚本会立即退出,得不到正确结果。
interact 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。否则退出登录。
$argv 参数数组
expect 脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第
一个,第二个,第三个....参数。
10 .环境变量
shell和脚本使用变量来存储数据 ,有些变量可以连同它们的内容传递给子进程,这些变量我们称之为环境变量。
使用env命令显示所有环境变量
使用set命令现实所有本地定义的shell变量
Bash启动脚本
在用户登录的时候,会运行全局变量文件/etc/profile,和用户自定义变量文件
~/.bash_profile去初始化它们的环境变量.
11. 使用别名
alias命令可以用来自定义属于自己的系统命令,写入~/.bashrc 文件永久生效。
查看别名:# alias
设置别名: alias mycom='echo hello;hostname'
删除别名: unalias mycomm
12 使用函数
示例:
2.
相关文章推荐
- 5个Shell脚本编程入门练习例子
- 5个Shell脚本编程入门练习例子
- 5个Shell脚本编程入门练习例子
- shell脚本编程基础1及练习
- Shell脚本编程练习
- shell脚本编程-循环语句练习
- shell脚本编程练习
- 5个shell脚本编程入门练习示例
- 5个Shell脚本编程入门练习例子
- Shell脚本编程的常识
- 【Shell 编程基础第一部分】第一个Shell脚本HelloShell及一些简单的Shell基础书写与概念;
- Unix整理笔记——基本shell脚本编程——里程碑M14
- Shell脚本编程-反引号,单引号,双引号
- 【转】Shell脚本编程的常识
- shell 脚本编程之特殊变量
- 浅谈自底向上的Shell脚本编程及效率优化
- shell脚本编程考试及参考答案
- 浅谈自底向上的Shell脚本编程及效率优化
- Shell 编程--本文结合大量实例阐述如何编写一个shell脚本
- shell脚本练习(12.7)