首页 > 代码库 > linux笔记 3-11 3-12 shell脚本

linux笔记 3-11 3-12 shell脚本

## 1.创建新shell脚本 ##

1. 创建包含bash命令的文本文件。文件的第一行应为:

#!/bin/bash

2. 使文件可执行(使用chmod +x scripts)

3.脚本调试模式:

#!/bin/bash -x

# bash -x scripts

 

## 2.引用和转义 ##

弱引用

将字符串放置在双引号中,保留字符串中所有字符的文字值,$、`、\和!字符除外。换言之,变量扩展和命令扩展在双引号内仍起作用。

例:

技术分享

 

强引用将字符串放置在单引号中,保留字符串中所有字符的文字值,同时禁用所有扩展:

例:

 技术分享

转义

非引用的\是转义字符。它保留了下一个字符的文字值。(例如,\$PATH是确切的字符串$PATH,而不是PATH变量的内容。)

例:

 技术分享

## 3.数值运算 ##

 

1.$[]

例:

技术分享

2.Expr

例:

 技术分享

3.(())

例:

 技术分享

4.Let

例:

 技术分享

## 4.循环for do done ##

 技术分享

## 5.位置参数 ##

参数总数:$#

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

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

例:

 技术分享

##6.test条件判断##

语法:test EXPRESSION 或 [EXPRESSION]

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

如果表达式为true,返回零退出状态,如果表达式为false,则返回非零退出状态

 

## 字符比较运算符 ##

= , !=

例:

技术分享 

## 数字比较运算符 ##

 

-eq等于

-ne不等于

-lt小于

-le小于或等于

-gt大于

-ge大于或等于

例:

技术分享 

 

## 文件状态运算符 ##

 

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

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

 

-b块文件

-c字符文件

-e文件存在

-f普通文件

-d目录

-r文件可读

-L软链接

例:

技术分享 

## 逻辑运算符 ##

-o

-a

&&为真时执行

||为假时执行

 

例:

技术分享 

## 7.if语句 ##

技术分享 

## 8.expect语句 ##

 

#!/usr/bin/expect

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

set timeout 10

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

spawn talk

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

expect "who"

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

send "westos\n"

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

expect eof

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

interact

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

$argv 参数数组

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

一个,第二个,第三个....参数。

 

脚本练习:

扫描当前局域网主机,如果可以ping通的话。就登录进去创建userfile里的

用户并且对应passwdfile里的密码。如果这个用户存在了,不要更改人家的密码。

Scan脚本:

技术分享 

Scp脚本:

技术分享 

Ssh脚本:

技术分享

创建用户脚本:

技术分享

测试结果:

技术分享

linux笔记 3-11 3-12 shell脚本