Bash Scripts基础II

来源:互联网 发布:装饰网络销售要求 编辑:程序博客网 时间:2024/06/06 19:09

###Bash Scripts基础II###


1.Bash位置参数

有两种简单的方法可以将用户输入读入bash中的变量。

- 用read提示用户输入(使用-p选项)并将其直接存储到一个或多个变量:

    交互式输入

    read -p 'Enter your first and last name: ' FIRST LAST

- 使用位置参数来读取传递给脚本的命令行参数或选项输入。各种特殊变量存储传递的选项编号。

Bash解析的个别参数或整个原始命令行。

    指定的位置参数总数: $#

    位置参数自身:  $0、$1、$2、$3....

    所有位置参数: $@、$*

2.退出状态

Linux命令完成时,将返回退出状态。成功完成程序时,将返回0的退出状态。这被bash当作逻辑True值。非零退出状态通常表示发生了错误,并且被bash当作逻辑False值。

推出状态的值被存储在”?”,可以使用以下命令查看:

echo $?

例如:grep的退出状态的含义:

0 – 在指定的文件中找到了模式

1 – 在指定的文件中未找到模式

>1 – 一些其他错误(无法打开文件、错误的搜索表达式等)

推出状态的值被存储在"?"中,可以使用以下命令查看:
# echo $?

1>成功退出


2>错误退出 


3.test条件判断

test命令可用于评估bash脚本中的表达式。它评估其参数所指定的表达式,如果表达式为true,返回零退出状态,如果表达式为false,则返回非零退出状态。test具有替代语法,使用方括号"[]"将表达式括起来,这样更易于阅读。

语法:test EXPRESSION 或 [ EXPRESSION ]

<1>非零或零长度字符串运算符:test -{n|z} STRING 

[root@server0 ~]# [ -n westos ]; echo $?

0

[root@server0 ~]# [ -z westos ]; echo $?

1
eg: ping ip查看是否连通,如果输入为空,则输出please give me a ipadress.

 


<2>字符串比较运算符:=!= 
[root@server0 ~]# [ abc = abc ]; echo $?

0

[root@server0 ~]# [ abc = ABC ]; echo $?

1

[root@server0 ~]# [ abc != ABC ]; echo $?

0
<3>数字比较运算符:-eq(等于)-ne(不等于)-lt(小于)-le(小于等于)-gt(大于)-ge(大于等于
[root@server0 ~]# [ 1 -eq 1 ]; echo $?

0

[root@server0 ~]# [ 1 -ne 1 ]; echo $?

1

[root@server0 ~]# [ 1 -gt 2 ]; echo $?

1

eg:求两数之和是否小于10

 


 


<4>文件状态运算符:

test -{b|c|e|f|d|r|w|x|s|L} FILE/DIRECTORY

-b  块设备文件           -c  字符特殊文件

-e  文件存在                -f  普通文件

-d  目录                  -r  可读文件

-w  可写文件                -x  可执行文件

-s  文件不为空           -L  链接文件

[root@server0 ~]# [ -b /dev/sda ]; echo $?

1

[root@server0 ~]# [ -c /dev/zero ]; echo $?

0

[root@server0 ~]# [ -e /etc/passwd ]; echo $?

0

[root@server0 ~]# [ -f /etc/passwd ]; echo $?

0

[root@server0 ~]# [ -d /etc/passwd ]; echo $?

1

[root@server0 ~]# [ -L /etc/passwd ]; echo $?

1

eg: vim check_file.sh


<5>二进制文件运算符:-ef-nt-ot

File1   -ef   File2     两文件指向相同的设备和节点号

File1   -nt   File2     File1比File2新:File1存在,File2不存在

File1   -ot   File2 File1比File2老;File1不存在,File2存在

[root@server0 bin]# [ /bin/mount -ef /usr/bin/mount ]; echo $?

0

[root@server0 bin]# [ /bin/mount -nt /usr/bin/mount ]; echo $?

1

[root@server0 bin]# [ /bin/mount -ot /usr/bin/mount ]; echo $?


<6>逻辑运算符:-o-a!&&||

-a  :与逻辑,可以用&&代替

-o :或逻辑,可以用 || 代替

:非操作

[root@server0 bin]# [ 2 -gt 1 -a 1 -gt 2 ]; echo $?

1

[root@server0 bin]# [ 2 -gt 1 -o 1 -gt 2 ]; echo $?

0

[root@server0 bin]# [ ! 2 -gt 1 ]; echo $?

1

4.if语句

if命令检查if后面的命令或列表的退出值。如果第一个命令评估为true/零,则运行then之后的命令列表,直至任一else。如果第一个命令评估为false/非零,则运行else与fi之间的命令列表(反向平写if,标记if块的结束)。

语法:

if command; then command; command2; else command3; fi

eg:判断一个文件类型


5.case语句

case语句 :它能够把变量的内容与多个模板进行匹配,再根据成功匹配的模板去决定应该执行哪部分代码。

eg:输入APPLE输出BANAN,反之也成立。 
 

6.expect语句

shell中利用expect实现自动应答脚本。

!/usr/bin/expect

这一行告诉操作系统脚本里的代码使用那一个shell来执行。

 

set timeout 10

设置后面所有的expect命令的等待响应的超时时间,单位为秒。

 

spawn talk

spawn是expect的内部命令,作用是给后面的shell指令加个壳,用来传递交互指令。

 

expect "who"

判断上次输出结果里是否包含“who”的字符串,如果有则立即返回,否则等待超时时间后返回。

 

send "westos\n"

执行交互动作,相当于手工输入"westos"。

 

expect eof

作用是在输出中搜索文件结束符,如果没有这一行,脚本会立即退出,得不到正确结果。

 

interact

执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。否则退出登录。

 

$argv 参数数组

expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个....参数。

 

eg1:

vim /mnt/ask.sh

 

vim /mnt/answer.exp

 

 

 

eg2:自动连接ssh

vim /mnt/autosh.exp

 

/mnt/autosh.exp 172.25.254.100 westos 自动连接


eg3vim check_hostname.sh

提取ip

 

 

eg4:自动连接ip并显示域名

vim /mnt/check_hostname.sh

 

vim /mnt/autosh.exp

 

 

eg5:查询主机分区占用率

 

 

 

 

7.环境变量

shell和脚本使用变量来存储数据 ,有些变量可以连同它们的内容传递给子进程,这些变量我们称之为环境变量。

设置环境变量的三种办法: 
<1>shell中设置,只对当前的shell起作用,换一个shell就无效了。 
 
<2>修改/etc/profile文件,所有用户都有权使用这个环境变量,可能会牵扯一些安全性问题。 
在文件最后添加:$PATH=“NEW_PATH” 
添加后执行:source /etc/profile重新加载文件 

 


<3>修改~/._profile文件,这种方法可以把使用环境变量的权控制到用户级别.

 



1>使用别名 
alias命令可以用来自定义属于自己的系统命令,写入~/.bashrc文件永久生效。 
查看别名:alias 
设置别名: 


vim /etc/bashrc

 

卸载别名:unalias xie


2>使用函数 

 

sh test.sh ping 172.25.254.100

yes

sh test.sh check /etc/passwd

yes

 

脚本:编写userfile文件存储用户信息,用户不存在将其创建出来并设置密码

 

 

vim /mnt/ctrl_user.sh 实现用户的创建与删除

 

 

 

采用ACTION函数来实现简化

 

 

 

 


原创粉丝点击