shell脚本快速入门系列—————— shell脚本编程规范

1、开发语言概述

开发语言简单举例:shell,Python,Java,JavaScript,HTML,CSS

强语言:定义变量时需要声明数据类型:如Java,C语言等

整型:int ,如1 ,2 ,3, ,100,等
长整型:Long
浮点型
单精度,float,4字节,如3.14
双精度,double,8字节
String:字符串
char ,字符 ‘a’ 1字节(Java中 ‘a’ 2字节),'男’2字节
boolean,布尔值,true or false
date,日期
int a=10;
弱语言:不需要声明,如shell,JavaScript,Python

a=10
a=10.1
HTML,标记语言,标签, ,xml文件格斯

json,键:值,key:value,a:10

shell变量直接定义,不需要声明,没有面向对象思想,所有的语言编写犹如记流水账

2、shell脚本应用场景

  • shell脚本的概念
    将要执行的命令按顺序保存到一个文件文本
    给该文件可执行权限,便可运行
    可结合各种shell控制语句以完成更复杂的操作
  • shell脚本应用场景
    重复性操作
    批量事务处理
    自动化运维
    服务运行状态监控
    定时任务执行

3、shell编程规范

shell的作用

命令解释器,“翻译官”

介于系统内核与用户之间,负责解释命令行
在这里插入图片描述
用户的登录shell

登录后默认使用的shell程序,一般为/bin/bash

不同shell的内部指令,运行环境等会有所区别

[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

4、编写第一个shell脚本

(1)编写脚本代码

  • 使用vim文本编辑器

  • 每行一条Linux命令,按执行顺序依次编写

  • 脚本后缀为.sh

  • 例如,将一下三条命令按顺序用shell脚本编写

cd /boot
pwd
ls -lh vm*
[root@localhost opt]# vim demo.sh
#!/bin/bash		'shell脚本标准格式'
cd /boot
pwd
ls -lh vm*
~    	'保存退出'
[root@localhost opt]# ls
demo.sh  rh

(2)执行脚本文件(四种方法)

方法一:sh脚本文件路径

[root@localhost opt]# sh demo.sh 
/boot
-rwxr-xr-x. 1 root root 5.7M Oct 23 14:07 vmlinuz-0-rescue-d078430d0d8f434fb5ad6e47678ea86f
-rwxr-xr-x. 1 root root 5.7M Aug 23  2017 vmlinuz-3.10.0-693.el7.x86_64

方法二:source脚本文件路径

[root@localhost opt]# source demo.sh 
/boot
-rwxr-xr-x. 1 root root 5.7M Oct 23 14:07 vmlinuz-0-rescue-d078430d0d8f434fb5ad6e47678ea86f
-rwxr-xr-x. 1 root root 5.7M Aug 23  2017 vmlinuz-3.10.0-693.el7.x86_64
方法三:.空格脚本文件路径
[root@localhost opt]# . demo.sh 	'会自动切换到目标文件夹,所以文件夹需要切换回/opt'
/boot
-rwxr-xr-x. 1 root root 5.7M Oct 23 14:07 vmlinuz-0-rescue-d078430d0d8f434fb5ad6e47678ea86f
-rwxr-xr-x. 1 root root 5.7M Aug 23  2017 vmlinuz-3.10.0-693.el7.x86_64

方法三:.空格脚本文件路径

[root@localhost opt]# . demo.sh 	'会自动切换到目标文件夹,所以文件夹需要切换回/opt'
/boot
-rwxr-xr-x. 1 root root 5.7M Oct 23 14:07 vmlinuz-0-rescue-d078430d0d8f434fb5ad6e47678ea86f
-rwxr-xr-x. 1 root root 5.7M Aug 23  2017 vmlinuz-3.10.0-693.el7.x86_64
方法四:脚本文件路径(绝对路径与相对路径)
[root@localhost boot]# cd /opt		'source之后会自动切换到目标文件夹,所以文件夹需要切换回/opt'
[root@localhost opt]# ./ demo.sh 
-bash: ./: Is a directory		'提示没有权限'
[root@localhost opt]# chmod +x demo.sh 		'增加权限'
[root@localhost opt]# ./demo.sh 
/boot
-rwxr-xr-x. 1 root root 5.7M Oct 23 14:07 vmlinuz-0-rescue-d078430d0d8f434fb5ad6e47678ea86f
-rwxr-xr-x. 1 root root 5.7M Aug 23  2017 vmlinuz-3.10.0-693.el7.x86_64
[root@localhost opt]# 		'拥有权限之后,我们做个另两种方法的测试'
[root@localhost opt]# sh demo.sh 
/boot
-rwxr-xr-x. 1 root root 5.7M Oct 23 14:07 vmlinuz-0-rescue-d078430d0d8f434fb5ad6e47678ea86f
-rwxr-xr-x. 1 root root 5.7M Aug 23  2017 vmlinuz-3.10.0-693.el7.x86_64
[root@localhost opt]# source demo.sh 
/boot
-rwxr-xr-x. 1 root root 5.7M Oct 23 14:07 vmlinuz-0-rescue-d078430d0d8f434fb5ad6e47678ea86f
-rwxr-xr-x. 1 root root 5.7M Aug 23  2017 vmlinuz-3.10.0-693.el7.x86_64
[root@localhost boot]# 

(3)执行脚本文件(四种方法)的总结

  • source与sh和.空格 执行脚本,涉及到切换路径时,source和.空格会切换路径,但sh不会切换路径

./类似于sh,不切换路径

  • 没有权限时,四种方式,.空格 sh和source可以执行,./不可以执行。有权限时,四个都可以执行

(4)更完善的脚本构成

[root@localhost opt]# vim demo.sh
#!/bin/bash
#This is my first shell-script		'脚本描述信息'
cd /boot
echo "当前所在路径:"		'输出友好提示信息'
pwd
echo "以vm为开头的文件是:"		'输出友好提示信息'
ls -lh vm*

[root@localhost opt]# ./demo.sh 
当前所在路径:
/boot
以vm为开头的文件是:
-rwxr-xr-x. 1 root root 5.7M Oct 23 14:07 vmlinuz-0-rescue-d078430d0d8f434fb5ad6e47678ea86f
-rwxr-xr-x. 1 root root 5.7M Aug 23  2017 vmlinuz-3.10.0-693.el7.x86_64

5、管道与重定向

(1)交互式硬件设备

标准输入:从该设备接收用户输入的数据

标准输出:通过该设备向用户输出数据

标准错误:通过该设备报告执行出错信息

在这里插入图片描述

(2)重定向操作

在这里插入图片描述

[root@localhost opt]# chattr +i /etc/passwd /etc/shadow		'锁定用户和密码文件'
[root@localhost opt]# lsattr /etc/passwd /etc/shadow		'查看锁定情况'
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost opt]# useradd lisi		'尝试添加用户'
useradd: cannot open /etc/passwd	'提示错误'
[root@localhost opt]# useradd lisi 2> /opt/error.txt	'将错误信息输入到新的error.txt'
[root@localhost opt]# ls 
demo.sh  error.txt  rh
[root@localhost opt]# cat /opt/error.txt 	'查看文本内容'
useradd: cannot open /etc/passwd
[root@localhost opt]# 		'操作没有错误,则输出的内容没有错误信息'

(3)管道操作符号“|”

将左侧的命令输出结果,作为右侧命令的处理对象(前后有关系时使用)

[root@localhost opt]# grep "bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
lisi:x:1000:1000:lisi:/home/lisi:/bin/bash
[root@localhost opt]# grep "bash$" /etc/passwd | awk -F: '{print $1,$7}'		'此间的-F:也可以用空格和Tab代替'
root /bin/bash
lisi /bin/bash
[root@localhost opt]# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda2      xfs        20G  4.1G   16G  21% /
devtmpfs       devtmpfs  898M     0  898M   0% /dev
tmpfs          tmpfs     912M     0  912M   0% /dev/shm
tmpfs          tmpfs     912M  9.1M  903M   1% /run
tmpfs          tmpfs     912M     0  912M   0% /sys/fs/cgroup
/dev/sda5      xfs        10G   39M   10G   1% /home
/dev/sda1      xfs       6.0G  174M  5.9G   3% /boot
tmpfs          tmpfs     183M  4.0K  183M   1% /run/user/42
tmpfs          tmpfs     183M   36K  183M   1% /run/user/1000
tmpfs          tmpfs     183M     0  183M   0% /run/user/0
[root@localhost opt]# df -hT | awk '{print $1,$2,$6}'	'查看第1.2.6列的数据'
Filesystem Type Use%
/dev/sda2 xfs 21%
devtmpfs devtmpfs 0%
tmpfs tmpfs 0%
tmpfs tmpfs 1%
tmpfs tmpfs 0%
/dev/sda5 xfs 1%
/dev/sda1 xfs 3%
tmpfs tmpfs 1%
tmpfs tmpfs 1%
tmpfs tmpfs 0%

[root@localhost opt]# df -hT | awk -F " " '{print $1,$2,$6}'	'查看第1.2.6列的数据'
Filesystem Type Use%
/dev/sda2 xfs 21%
devtmpfs devtmpfs 0%
tmpfs tmpfs 0%
tmpfs tmpfs 1%
tmpfs tmpfs 0%
/dev/sda5 xfs 1%
/dev/sda1 xfs 3%
tmpfs tmpfs 1%
tmpfs tmpfs 1%
tmpfs tmpfs 0%
[root@localhost opt]# df -hT | grep "sda2" | awk '{print $6}'
21%		'查看设备sda2第6列的数据'

awk :大部分情况,按列读取
大部分情况下
grep:过滤关键字
sed: 按行读取
awk:按列读取数据

$1,$2:位置变量

猜你喜欢

转载自blog.csdn.net/weixin_47219935/article/details/107378400