专栏首页用户7721898的专栏shell脚本快速入门系列—————— shell脚本编程规范

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:位置变量

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 搞它!!!Linux构建远程YUM仓库与NFS共享存储服务

    FTP服务:ftp://… HTTP服务: http://… 本地目录:file://…

    不吃小白菜
  • 大点干!早点散----------LVS负载均衡之LVS-NAT部署实战

    VMware软件 一台centos7作为LVS网关,双网卡 两台centos7作为Apache服务器 一台centos7作为NFS存储 一台win10作...

    不吃小白菜
  • 大点干!早点散----------深入剖析GFS分布式文件系统

    Gluster File System,开源的分布式文件系统,是Scale存储的核心,能够处理千数量级的客户端.在传统的解决 方案中Glusterfs能够灵活的...

    不吃小白菜
  • Leetcode 129 Sum Root to Leaf Numbers

    Given a binary tree containing digits from 0-9 only, each root-to-leaf path cou...

    triplebee
  • Shel正则表达式

    剧终
  • LeetCode 1457. 二叉树中的伪回文路径(位运算+递归)

    给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。

    Michael阿明
  • 学习笔记0528----Tomcat配置

    我们已经学过了LAMP和LNMP架构;针对的开发语言是PHP;可以说PHP是一门开发Web程序非常流行的语言;早期的比较流行的是asp,是在windows平台上...

    嘻哈记
  • 【剑指Offer】54. 二叉查找树的第 K 个结点

    题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。

    瑞新
  • 另一个Web应用服务器——Tomcat

    Tomcat 由于其比较突出的优势,譬如 技术先进、性能稳定,而且免费,所以深受 Java 语言爱好者的喜爱,并且得到了部分软件开发商的认可,目前已经成为比较流...

    魏豪
  • Tomcat_02_应用部署

    第一种方式是直接将程序目录放在webapps目录下面,这种方式大家已经明白了,就不多说了。

    Cyylog

扫码关注云+社区

领取腾讯云代金券