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/.$//'`"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值