linux shell脚本小白,bash脚本编程和工具

作者:LAMP小白  点击:2747  发布日期:2014-06-08 14:36:45  返回列表

RHEL中默认的shell是bash。bash shell可用于在提示时以交互方式输入命令,或者他可以从特殊文本文件shell脚本中读取命令。

脚本入门

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

#!/bin/bash

使文件可以执行(chmod)

将文件放置于$path的目录中

~/bin 用于用户的私有程序

/usr/local/bin 本地开发,由系统其他人使用的脚本

/usr/local/sbin 本地开发由root使用的脚本

shell变量

shell变量,用于为稍后在脚本中使用的名称指定值,并且仅限于shell命令行或从中声明变量的脚本。

定义或指定值

MIO=haha

若要参考或使用变量

$mio

${mio}

引用和转义

引用有三种类型

弱引用

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

[root@MIO-02 ~]# mio=haha

[root@MIO-02 ~]# echo $mio

haha

[root@MIO-02 ~]# echo "mio is $mio"

mio is haha

[root@MIO-02 ~]# echo "date is $(date +%r)"

date is 11:02:14 AM

强引用

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

[root@MIO-02 ~]# echo 'mio is $mio'

mio is $mio

转义

非引用是转义字符,他保留了下一个字符的文字值

[root@MIO-02 ~]# echo "mio is $mio"

mio is $mio

重复

bash循环用于值列表中的相同命令重复。在某些语言中被称为foreach循环。

for one in /etc/*.conf; do

echo $one

done

[root@MIO-02 ~]# ./for.sh

/etc/autofs_ldap_auth.conf

/etc/cgconfig.conf

/etc/cgrules.conf

/etc/cgsnapshot_blacklist.conf

/etc/dracut.conf

条件分支

当大多数linux命令完成时,将返回退出状态。此退出状态的值可用于决定要运行哪一个代码。

成功完成退出时,将返回0

if命令检查if后面的命令或列表的退出值

for one in /etc/*.conf; do

if test "$one" == '/etc/gai.conf'; then

echo '1111111111111'

else

continue

fi

done

读取输入和位置参数

有两种简单的方式将用户输入读入bash中,第一种方法是使用read提示用户输入(- p)选项,将其输入存储到一个或多个变量

另一种方式是使用为位置参数,来读取传递给脚本的命令行参数或选项输入。各种特殊变量存储传递的选项编号、bash解析的个别参数或整个原始命令行。

#!/bin/bash

echo $1

echo $2

[root@MIO-02 ~]# ./for.sh 111 222

在远程计算机上运行命令

ssh命令可用于在远程计算机上打开shell并在该计算机上运行命令。有时,你可能想要保存在远程计算机上运行的命令输出,无论保存在远程计算机还是本地计算机上。根据你引用的IO重定向和通过ssh运行命令的方式,任一结果都有可能。

ssh user@host 'command1;command2' > log.local

ssh user@host 'command1;command2' > log.remote

文本处理工具

当编写用于自动执行任务的脚本时,经常使用以下命令。许多脚本需要处理其他命令输出,已将其更改为她们可以控制或做出决定的形式。

diff命令

diff命令用于比较两个文件内容,以了解其区分,他还可用于创建补丁文件,补丁文件用于在企业环境的多台计算机之间对相似度文件进行更改。

-c 显示上下文周围的行

-u 使用统一的输出格式

-r 从制定目录开始对文件执行递归比较

创建补丁文件

[root@MIO-02 ~]# diff -Naur ./for.sh ./data > pathfile

grep命令

grep将显示文件中模式匹配的行

模式可以包含正则表达式,因此始终为正则表达式加引号通常被视为一种好办法

-i 执行不区分大小写的搜索

-n 前置返回行的行号

-r 递归搜索

-c 显示具有匹配模式的行的计数

-v 返回不包含模式的行

-l 列出至少一行包含模式的文件的名称

cut 命令

cut用于剪切文件中的文本字段或列并将其显示到标准输出

-d 指定用于提取字段的分隔符

-f 指定要从每行中提取的字段

-c 指定要从每行中提取的文本列

[root@MIO-02 test]# cut -f3 -d: /etc/passwd

head命令

head命令仅用于显示文件的前几行

[root@MIO-02 test]# head -n 5 /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

tail命令

tail显示文件的最后几行,-f会实时显示文件

[root@MIO-02 test]# tail -f /etc/passwd

vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

wc命令

wc计算文件中行、字、字节或字符的数量。在传统unix系统中,文本文件的每个字符正好占用一个字节,但随着国际化大型字符集的出现,则需要使用-m选项以获得准确的字符计数

-l 显示行数

-w 显示字数

-c 显示字节数

-m 显示字符数

[root@MIO-02 test]# wc -m /etc/passwd

1176 /etc/passwd

[root@MIO-02 test]# wc -l /etc/passwd

25 /etc/passwd

[root@MIO-02 test]# wc -c /etc/passwd

1176 /etc/passwd

sort命令

sort用于排序文件数据,该数据可以位于未见中或其他命令输出中。sort通常与管道一起使用。

-n 按数值而非字符排序

-k 设置排序字段

-t 制定其他字段分隔符(默认为空格)

[root@MIO-02 test]# cat /etc/passwd | cut -f3 -d: | sort -n

uniq命令

uniq删除文件中重复的相邻行。若要只打印文件中出现的唯一行,必须先对uniq的输入进行排序

-u 仅显示唯一行

-d 显示重复行

-c 每行显示一次

[root@MIO-02 test]# cut -f7 -d: /etc/passwd| sort | uniq -d

/bin/bash

/sbin/nologin

tr命令

tr用于转换字符,如果给定了两个字符范围,则只要发现某个字符位于第一个范围内,就会将其转换为第二个范围中对等的字符

[root@MIO-02 test]# cat /etc/passwd | tr 'a-z' 'A-Z'

ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH

BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN

sed命令

sed是流编辑器,用于对文本数据流执行编辑,和grep一样sed通常在管道中使用。

s/old/new/ 替换

d 删除

上一篇:调节和维护内核

下一篇:快递查询API

0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值