Linux之shell脚本编程

1.编写shell脚本环境:

1.1 编写目的:

写shell脚本时前几行内容自动加入 行缩进 语法提示 美观 等

1.2 编写步骤:

vim .vimrc ------>将vimrc-anliu 文件的内容复制粘贴到此配置文件中---->修改其个别内容。(修改时使用vim不能粘贴时 可使用vi 例如博客地址)

2.shell

2.1 用途:

使用简单,是Shell命令的集合 。
运行节省时间 可实现批量管理。
自动化 批量处理减少出错概念率。

2.2 shell概述

shell:命令解释器,shell也是一门编程语言及shell脚本.

种类:sh,bash,ksh,csh…(大多数的linux发行版 bash)

2.2.1 bash的特性:

a 历史记录 ----> 用户行为升级
b 别名 ----> 企业垃圾桶,rm --》mv
c 补全 ----> 命令($PATH),目录
d 支持通配符 ---->*,[],[^]
e 前后台作业 ---->jobs, & ,bg,fg
f 运行脚本

系统shell类型 cat /etc/shells
默认shell echo $SHELL
在这里插入图片描述

2.2.2 bash 安全性:
[root@localhost ~]# env x='(){:;}; echo be careful ' bash -c "echo this is a test" 

在这里插入图片描述
this is a test
如果返回
be careful
this ia a test
则需要升级系统。

[root@localhost ~]# yum -y update bash
[root@localhost ~]# rpm -qa bash

2.3 shell的建立

在这里插入图片描述

2.4 shell的执行

a 通过sh或者bash命令执行

[root@bogon test]# bash useradd.sh 
[root@bogon test]# sh useradd.sh 

b 直接运行,脚本必须要有可执行权限

[root@bogon test]# /root/test/useradd.sh

c 通过. 或者source 执行,在文件中的变量,函数的返回值将会加载到父及bash环境中。

[root@bogon test]# . useradd.sh 
[root@bogon test]# source useradd.sh 

在脚本中定义的变量时局变量,
在命令行可以echo $hanhan 的是全变量,

d 通过重定向,说明bash和sh是可以接受标准输入的。

[root@bogon test]# bash < test.sh 
[root@bogon test]# sh < test.sh 

3.shell脚本

3.1 脚本的注释

单行注释:#
多行注释:
:<<BLOCK
BLOCK

3.2 脚本规范

3.2.1 开头指定脚本解释器

#!/bin/sh或#!/bin/bash
其他行#表示注释
名称见名知义 backup_mysql.sh,以sh结尾

3.2.2开头加版本版权等信息

#Date:创建日期
#Author:作者
#Mail:联系方式
#Function:功能
#Version:版本

3.2.3 脚本中尽量不用中文注释

别吝啬添加注释,必要的注释方便自己别人理解脚本逻辑和功能;
尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰;
单行注释,可以放在代码行的尾部或代码行的上部;
多行注释,用于注解复杂的功能说明,可以放在程序体中,也可以放在代码块的开始部分
代码修改时,对修改的内容

3.2.4 多使用内部命令

内部命令可以在性能方面为你节省很多。
type 命令。

3.2.5 没有必要使用cat命令,尽量少使用管道。

eg:cat /etc/passwd | grep guru
使用以下方式即可
eg:grep guru etc/passwd

3.2.6 代码缩进
3.2.7 仔细阅读出错信息

有时候我们修改了某个错误并再次运行后,系统依旧会报错。然后我们再次修改,但系统再次报错。这可能会持续很长时间。
但实际上,旧的错误可能已经被纠正,只是由于出现了其它一些新错误才导致系统再次报错

3.2.8脚本以.sh为扩展名

eg:script-name.sh

4 shell变量

查看:

env: 系统的全局变量
set: 所有的全局变量
declare: 所有导入的全局变量和函数

4.1定义全局变量

[root@bogon test]# export a="123"
[root@bogon test]# b=456
[root@bogon test]# export b

4.2局部变量的定义

‘’ : 强引
“” :弱引
`` : 执行Shell命令

[root@server02 ~]# a=192.168.42.1
[root@server02 ~]# echo "a=$a"   #弱引
a=192.168.42.1 
[root@server02 ~]# b=a-$a   #没有加引号,也没解析变量
[root@server02 ~]# echo $b
a-192.168.42.1 
[root@server02 ~]# b='a-$a'   #强引
[root@server02 ~]# echo $b
a-$a
[root@server02 ~]# a=date
[root@server02 ~]# echo $a
date
[root@server02 ~]# echo `$a`
2020年 06月 19日 星期五 17:51:45 CST

永久生效

/etc/profile(/etc/profile.d/*),~/.bash_profile,~/.bashrc,/etc/bashrc

tee命令: tee命令用于读取标准输入的数据,并将其内容输出成文件。
参数:

-a或--append  附加到既有文件的后面,而非覆盖它.
-i或--ignore-interrupts  忽略中断信号。
--version  显示版本信息。

在这里插入图片描述

5. shell中常见的固定性的内容的生成

5.1 加密码 (文件一样 加密码一样 文件不一样 加密码就不一样)

Centos 6:

grub-md5-cryp
grub-md5-crypt >> /etc/grub.conf
grub-md5-crypt |tee -a /etc/grub.conf

Centos 7:

(grub:搜索mkpasswd:生成随机密码)
grub2-mkpasswd-pbkdf2

在这里插入图片描述

5.2 md5文件校验码:

[root@bogon test]# md5sum passwd1 
56cf56372303c1c769ec0d030144e60c  passwd1
[root@bogon test]# md5sum passwd
911bc5a50ff7cb7e2de6addb28c94abe  passwd

5.3生成自然数:

方法一:

[root@bogon test]# echo {001..100}
[root@bogon test]# echo {1..100}

实例:

#!/bin/bash
#Author:Anliu
#Blog: https://i.cnblogs.com/posts?cateId=1583983
#Time:2020-06-19 18:26:33
#Name:num.sh
#Version:V1.0
#Description:This is a test script.
read -p "请输入起始值:" sta
read -p "请输入终止值:" sto

for i in `eval echo {$sta..$sto}`
do
    echo $i
done

总结:bash不会解析多层变量,eval命令能解析多层变量。

[root@bogon test]# set 11 22 33 44
[root@bogon test]# echo $4
44
[root@bogon test]# echo $#   #打印参数的个数
4
[root@bogon test]# echo \$$#
$4
[root@bogon test]# eval echo \$$#
44

方法二:
seq命令用于产生从某个数到另外一个数之间的所有整数。
seq [选项]… 尾数
seq [选项]… 首数 尾数
seq [选项]… 首数 增量 尾数
-f, --format=格式 使用printf 样式的浮点格式
-s, --separator=字符串 使用指定字符串分隔数字(默认使用:\n)
-w, --equal-width 在列前添加0 使得宽度相同

[root@localhost ~]# seq -f "%3g" 8 12

[root@localhost ~]# seq -f "%03g" 8 12

[root@localhost ~]# seq -w 8 12


[root@localhost ~]# seq -s" " -f"str%02g" 9 11

[root@localhost ~]# seq -s"`echo -e "\t"`" 9 11

在这里插入图片描述

[root@localhost ~]# seq -s"`echo -e "\n"`" 9 11
root@localhost ~]# seq -s"=" 9 11

5.4 随机数生成:

方法一: $RANDOM (random :随机)

[root@localhost test]# echo $RANDOM
[root@bogon test]# cat random.sh 
#!/bin/bash
#Author:Anliu
#Blog: https://i.cnblogs.com/posts?cateId=1583983
#Time:2020-06-20 09:11:09
#Name:random.sh
#Version:V1.0
#Description:This is a test script.

function rand(){   
    min=$1  #400000 
    max=$(($2-$min+1))  #500000-400000+1   100001
    num=$(($RANDOM+1000000000)) #增加一个10位的数再求余   #4012 +10000000000 = 1000004012
    echo $(($num%$max+$min))   # 1000004012%100001 +400000  < 100001 +400000 < 500000;
    }   

read -p "please input your num of start:" sta
read -p "please input your num of end:" sto

rnd=$(rand $sta $sto)   
echo $rnd   
exit 0

方法二:openssl

[root@bogon test]# openssl rand -base64 8 |md5sum  |cut -c 1-12
[root@bogon test]# openssl rand -base64 8 |cksum |cut -c 1-10  #最大十位

5.5 生成UUID:

[root@bogon test]# uuidgen
[root@bogon test]# cat /proc/sys/kernel/random/uuid 

5.6生成MAC:

[root@bogon test]# echo "00:0c:29:`openssl rand -hex 3 | sed 's/\(..\)/\1:/g; s/.$//'`"
本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以选择使用符号模式或绝对模式 7 1.5 目录 7 1.6 suid/guid 7 1.6.1 为什么要使用suid/guid 8 1.6.2 设置suid/guid的例子 8 1.7 chown和chgrp 9 1.7.1 chown举例 9 1.7.2 chgrp举例 9 1.7.3 找出你所属于的用户组 9 1.7.4 找出其他用户所属于的组 10 1.8 umask 10 1.8.1 如何计算umask值 10 1.8.2 常用的umask值 11 1.9 符号链接 12 1.9.1 使用软链接来保存文件的多个映像 12 1.9.2 符号链接举例 12 1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改时间查找文件 17 2.1.7 查找比某个文件新或旧的文件 17 2.1.8 使用type选项 17 2.1.9 使用size选项 18 2.1.10 使用depth选项 18 2.1.11 使用mount选项 18 2.1.12 使用cpio选项 18 2.1.13 使用exec或ok来执行shell命令 19 2.1.14 find命令的例子 20 2.2 xargs 20 2.3 小结 21 第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 3.1.7 删除crontab文件 25 3.1.8 恢复丢失的crontab文件 25 3.2 at命令 25 3.2.1 使用at命令提交命令或脚本 26 3.2.2 列出所提交的作业 27 3.2.3 清除一个作业 27 3.3 &命令 27 3.3.1 向后台提交命令 28 3.3.2 用ps命令查看进程 28 3.3.3 杀死后台进程 28 3.4 nohup命令 29 3.4.1 使用nohup命令提交作业 29 3.4.2 一次提交几个作业 29 3.5 小结 30 第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1 标准输入 40 5.6.2 标准输出 40 5.6.3 标准错误 40 5.7 文件重定向 40 5.7.1 重定向标准输出 41 5.7.2 重定向标准输入 42 5.7.3 重定向标准错误 42 5.8 结合使用标准输出和标准错误 43 5.9 合并标准输出和标准错误 43 5.10 exec 44 5.11 使用文件描述符 44 5.12 小结 45 ... ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值