文档章节

Shell编程

脑洞老湿_
 脑洞老湿_
发布于 2017/09/12 14:36
字数 1426
阅读 5
收藏 0
点赞 0
评论 0

20.1 Shell脚本介绍

shell是什么?
shell是一种脚本语言 aming_linux blog.lishiming.net
可以使用逻辑判断、循环等语法
可以自定义函数
shell是系统命令的集合
shell脚本可以实现自动化运维,能大大增加我们的运维效率


20.2 Shell脚本结构和执行

shell脚本结构和执行方法:
开头需要加#!/bin/bash
以#开头的行作为解释说明
脚本的名字以.sh结尾,用于区分这是一个shell脚本
执行方法有两种 (1、bash; 2、绝对路径或者相对路径) chmod +x 1.sh; ./1.sh
bash 1.sh
查看脚本执行过程 bash -x 1.sh
查看脚本是否语法错误 bash -n 1.sh


[root@DasonCheng ~]# cd /usr/local/sbin/
[root@DasonCheng sbin]# vim first.sh
#! /bin/bash    //说明用什么脚本解析器;
#The shell script is my first scirpt!
#Written by chengzhenge 2017年 09月 12日 星期二 14:59:26 CST
date
echo 'hello world'
……

执行法1:sh +脚本

[root@DasonCheng sbin]# sh first.sh     //sh直接加脚本;
2017年 09月 12日 星期二 15:02:05 CST
hello world
##其实sh就是bash、详情如下:
[root@DasonCheng sbin]# ll /bin/sh
lrwxrwxrwx. 1 root root 4 5月  31 08:35 /bin/sh -> bash
[root@DasonCheng sbin]# ll /bin/bash
-rwxr-xr-x. 1 root root 960392 8月   3 2016 /bin/bash
[root@DasonCheng sbin]# bash first.sh     //sh first.sh也就是bash first.sh
2017年 09月 12日 星期二 15:03:42 CST
hello world
[root@DasonCheng sbin]# sh -x first.sh   //参数-x 查看执行过程;
+ date
2017年 09月 12日 星期二 15:02:08 CST
+ echo 'hello world'
hello world
[root@DasonCheng sbin]# sh -n first.sh    //参数-n查看脚本是否有逻辑循环问题;没有则没有显示;

执行法2:./first.sh或者/usr/local/sbin/first.sh

[root@DasonCheng sbin]# ./first.sh     //这样执行需要有执行权限哦!
-bash: ./first.sh: 权限不够
[root@DasonCheng sbin]# chmod +x first.sh 
[root@DasonCheng sbin]# ./first.sh     //相对路径执行;
2017年 09月 12日 星期二 15:09:15 CST
hello world
[root@DasonCheng sbin]# /usr/local/sbin/first.sh     //绝对路径执行;
2017年 09月 12日 星期二 15:09:21 CST
hello world

20.3 date命令用法

date  +%Y-%m-%d, date +%y-%m-%d 年月日
date  +%H:%M:%S = date +%T 时间
date +%s  时间戳
date -d @1504620492
date -d "+1day" 一天后
date -d "-1 day" 一天前
date -d "-1 month" 一月前
date -d "-1 min" 一分钟前
date +%w, date +%W 星期


[root@DasonCheng ~]# date +%Y%m%d    //日期Y:year,m:month,d:day
20170912
[root@DasonCheng ~]# date +%y%m%d
170912
[root@DasonCheng ~]# date +%Y-%m-%d
2017-09-12
[root@DasonCheng ~]# date +%F
2017-09-12
[root@DasonCheng ~]# date +%H%M%S    //时间H:hour,M:min,S:second
151534
[root@DasonCheng ~]# date +%H:%M:%S
15:15:53
[root@DasonCheng ~]# date +%T
15:16:34
[root@DasonCheng ~]# date +%w    //星期w:week,W:今年的第几周
2
[root@DasonCheng ~]# date +%W
37
[root@DasonCheng ~]# date +%s    //时间戳:现在距离1970年Linux出来的时候距离多少秒
1505201532
[root@DasonCheng ~]# date +%F
2017-09-12
[root@DasonCheng ~]# date +"%F %T"
2017-09-12 15:32:38
[root@DasonCheng ~]# date -d @1505201532    //时间戳转日期;
2017年 09月 12日 星期二 15:32:12 CST
[root@DasonCheng ~]# date +%s -d "2017-09-12 15:32:38"    //日期转时间戳;
1505201558

20.4 Shell脚本中的变量

当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替
使用条件语句时,常使用变量    if [ $a -gt 1 ]; then ... ; fi
引用某个命令的结果时,用变量替代   n=wc -l 1.txt
写和用户交互的脚本时,变量也是必不可少的  read -p "Input a number: " n; echo $n   如果没写这个n,可以直接使用$REPLY
内置变量 $0, $1, $2…    $0表示脚本本身,$1 第一个参数,$2 第二个 ....       $#表示参数个数
数学运算a=1;b=2; c=$(($a+$b))或者$[$a+$b]


1、变量:vim variable.sh

_变量的格式:变量名=变量的值
变量:相当于引用或者替代,下面来用脚本来说明: vim variable.sh _

[root@DasonCheng sbin]# cat variable.sh 
#! /bin/bash
#In this script we will use variables;
#Written by chengzhenge 2017-09-12
d=`date +%T`
echo "The script begin at $d"
echo "We will sleep 2 seconds"
sleep 2
d1=`date +%T`
echo "The script end at $d1"
[root@DasonCheng sbin]# sh variable.sh 
The script begin at 15:41:22
We will sleep 2 seconds
The script end at 15:41:24

2、数学运算:vim sum.sh

实现数学运算的方法1:sum=$[$a+$b]
实现数学运算的方法2:sum=$(($a+$b))

[root@DasonCheng sbin]# cat sum.sh 
#! /bin/bash
#For get the sum of two numbers
#Written by chengzhenge 2017-09-12
a=1
b=2
sum=$[$a+$b]    //实现数学运算的方法1:sum=$[$a+$b] 
echo "$a+$b=$sum"

echo "Wait for a moment,i will achieve it too"
sleep 3
#The other way to achieve the sum
a1=1
b1=2
sum1=$(($a1+$b1))    //实现数学运算的方法2:sum=$(($a+$b))
echo "$a1+$b1=$sum1"
[root@DasonCheng sbin]# sh sum.sh 
1+2=3
Wait for a moment,i will achieve it too
1+2=3

3、和用户交互:vim read.sh

:read命令用于和用户交互,它把用户输入的字符串作为变量值;如果没写这个n,可以直接使用$REPLY

[root@DasonCheng sbin]# cat read.sh 
#! /bin/bash
#Using 'read' in shell script
#Written by chengzhenge at 2017-09-12
read -p "please input a number:" x     
//read命令用于和用户交互,它把用户输入的字符串作为变量值;
read -p "please input another number:" y
sum=$[$x+$y]
echo "The sum of the two numbers is: $sum"
[root@DasonCheng sbin]# sh read.sh 
please input a number:1
please input another number:2
The sum of the two numbers is: 3

4、内置变量 $0, $1, $2…$#

:内置变量$1就是运行脚本第一个参数,$2是运行脚本第二个参数,$0是代表脚本本身名字,$#是代表运行脚本的参数个数!

[root@DasonCheng sbin]# cat option.sh 
#! /bin/bash
echo "$1,$2,$0,$#"    
//内置$1就是运行脚本第一个参数,$2是运行脚本第二个参数,$0是代表脚本本身名字,$#是代表运行脚本的参数个数!
[root@DasonCheng sbin]# sh option.sh 1 2
1,2,option.sh,2

© 著作权归作者所有

共有 人打赏支持
脑洞老湿_
粉丝 2
博文 148
码字总数 124412
作品 0
荆州

暂无相关文章

645. Set Mismatch - LeetCode

Question 645. Set Mismatch Solution 思路: 遍历每个数字,然后将其应该出现的位置上的数字变为其相反数,这样如果我们再变为其相反数之前已经成负数了,说明该数字是重复数,将其将入结果r...

yysue ⋅ 27分钟前 ⋅ 0

Confluence 6 从生产环境中恢复一个测试实例

请参考 Restoring a Test Instance from Production 页面中的内容获得更多完整的说明。 很多 Confluence 的管理员将会使用生产实例运行完整数据和服务的 Confluence 服务器,同时还会设置一个...

honeymose ⋅ 31分钟前 ⋅ 0

Python这么强?红包杀手、消息撤回也可以无视,手机App辅助!

论述 标题也许有点不好理解,其实就是一款利用Python实现的可以监控微信APP内的红包与消息撤回的助手。不得不说,这确实是一款大家钟意的神器。 消息撤回是一件很让人恶心的事,毕竟人都是有...

Python燕大侠 ⋅ 43分钟前 ⋅ 0

压缩打包介绍、gzip压缩工具、bzip2压缩工具、xz压缩工具

压缩打包介绍 压缩的好处不仅能节省磁盘空间而且在传输的时候节省传输时间和网络带宽 windows系统下文件带有 .rar .zip .7z 后缀的就是压缩文件 linux系统下则是 .zip, .gz, .bz2, .xz, ...

黄昏残影 ⋅ 48分钟前 ⋅ 0

观察者模式

1.利用java原生类进行操作 package observer;import java.util.Observable;import java.util.Observer;/** * @author shadow * @Date 2016年8月12日下午7:29:31 * @Fun 观察目标 **/......

Cobbage ⋅ 50分钟前 ⋅ 0

Ubuntu打印服务器配置

参考:https://blog.csdn.net/gsls200808/article/details/50950586 https://blog.csdn.net/jiay2/article/details/80252369 https://wiki.gentoo.org/wiki/HPLIP 由于媳妇儿要大量打印资料,......

大熊猫 ⋅ 56分钟前 ⋅ 0

面试的角度诠释Java工程师(二)

原文出处: locality 续言: 相信每一位简书的作者,都会有我这样的思考:怎么写好一篇文章?或者怎么写好一篇技术类的文章?我就先说说我的感悟吧,写文章其实和写程序是一样的。为什么我会...

颖伙虫 ⋅ 58分钟前 ⋅ 0

github中SSH的Key

https://help.github.com/articles/connecting-to-github-with-ssh/ https://help.github.com/articles/testing-your-ssh-connection/ https://help.github.com/articles/adding-a-new-ssh-k......

whoisliang ⋅ 59分钟前 ⋅ 0

only_full_group_by

我的mysql是在CentOS7.1下面的5.7.17 在 /etc/my.cnf 文件里加上如下: sql_mode='NO_ENGINE_SUBSTITUTION' 然后,重启Mysql服务 systemctl restart mysqld...

SunHacker ⋅ 今天 ⋅ 0

实际项目(SpringBoot项目)中集成Druid

参考网页 https://blog.csdn.net/liuchuanhong1/article/details/55050131 https://blog.csdn.net/CoffeeAndIce/article/details/78707819 https://www.pocketdigi.com/20170530/1577.html 为......

karma123 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部