设为首页 收藏本站
查看: 771|回复: 0

20.1-20.4 shell:脚本,脚本结构与执行,date用法,shell脚本的变量

[复制链接]

尚未签到

发表于 2018-8-21 07:07:17 | 显示全部楼层 |阅读模式
  20.1 shell是什么

  •   shell是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。
  •   实际上,他在shell和计算机硬件之间还有一层东西——系统硬核。如果把计算机硬件比作一个人的躯体,那系统内核就是人的电脑。至于shell,把它比作人的五官似乎更贴切些。
  •   用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。
  •   shell是一种脚本语言  微信公众号:aming_linux  博客:blog.lishiming.net shell从今天开始每天一看
  •   可以使用逻辑判断(if,if else),循环(for,while)等语法
  •   可以自定义函数
  •   shell是系统命令的集合
  •   shell脚本可以实现自动化运维,能大大增加我们的运维效率


  •   shell应该怎么写?
  •   拿到需求,要有具体的思路,展开需求关联,开始写shell
  
  20.2 Shell脚本结构和执行
  1 创建shell目录,后面都把脚本写在里面
[root@AliKvn ~]# mkdir shell  
[root@AliKvn ~]# ls
  2 编写shell脚本
[root@AliKvn ~]# vim 01.sh  
#!/bin/bash
  
echo "123"
  
w
  
ls
  参数解释:
  #!/bin/bash 第一行必须要这么写,如果脚本只在本机执行可以负略这行,
  但要考虑到在其他机器上运行的话,必须要加上,因为后面的命令是通过#!/bin/bash命令来解析命令的。
  3 shell脚本执行方法有两种,
  3.1 第一种是,给予脚本x执行权限
  给予脚本x权限,可以./脚本名称 直接执行,或者是直接执行它(绝对路径)
[root@AliKvn shell]# chmod a+x 01.sh  
[root@AliKvn shell]# !ls
  
ls -ll 01.sh
  
-rwxr-xr-x 1 root root 29 May 29 15:02 01.sh
[root@AliKvn shell]# ./01.sh  
123
  
16:40:08 up 40 days,  2:15,  1 user,  load average: 0.03, 0.06, 0.06
  
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
  
root     pts/1    211.148.147.194  14:52    0.00s  0.11s  0.00s w
  而且还可以cat查看脚本内容,因为已经脚本已经有执行权限,并可以被/bin/bash解析
[root@AliKvn shell]# cat 01.sh  
#! /bin/bash
  
echo "123"
  
w
  
ls
  3.2 第二种
  #bash 01.sh 或者#sh 01.sh
  因为bash和sh是同一个文件输出
  4 bash解析器的地址
  实际上,/bin/sh与/bin/bash是同一个文件,/bin/sh是链接于/bin/bash
[root@AliKvn shell]# ls -l /bin/bash  
-rwxr-xr-x 1 root root 960608 Sep  7  2017 /bin/bash
  
[root@AliKvn shell]# ls -l /bin/sh
  
lrwxrwxrwx 1 root root 4 Oct 15  2017 /bin/sh -> bash
  5 以#开头的行作为解释说明(第二行开始),它的作用仅仅是用来解释,并无任何执行意义。
  有些特殊脚本#是可以有效的,但不代表全部。
  6 脚本的名字以.sh结尾,用于区分这是一个shell脚本
  7 查看脚本执行过程 #bash -x 01.sh
[root@AliKvn shell]# bash -x 01.sh  
+ echo 123
  
123
  
+ w
  
15:19:49 up 40 days, 55 min,  1 user,  load average: 0.00, 0.01, 0.05
  
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
  
root     pts/1    211.148.147.194  14:52    5.00s  0.07s  0.00s bash -x 01.s
  
+ ls
  
01.sh
  每个+表示一个操作,一个动作。
  8 查看脚本是否语法错误,如果没有任何输出表示脚本没问题。
  [root@AliKvn shell]# bash -n 01.sh
  8.1 相反,如果有问题(只检测shell语法错误),会有错误信息输出
  例如把脚本修改错误,添加有问题的for循环语法,故意不把for的结尾参数写上
[root@AliKvn shell]# vim 01.sh  
#! /bin/bash
  
for i in `seq 1 10`
  
do
  
echo $i
  
echo "123"
  
w
  
ls
  8.2 执行语法检查命令,把done补上,可以看到有报错
  [root@AliKvn shell]# bash -n 01.sh
  01.sh: line 9: syntax error: unexpected end of file
  8.3 写入正确的参数 再检查
#! /bin/bash  
for i in `seq 1 10`
  
do
  
echo $i
  
done
  
echo "123"
  
w
  
ls
  录入正确参数后,无错误输出
[root@AliKvn shell]# bash -n 01.sh  *****以上用了#bash的命令都可以用#sh,因为指向同一个命令文件
  20.3 date命令用法
  date命令在shell脚本中常用的几个用法如下
  date +%Y 表示以四位数字格式打印年份
  date +%y  表示以两位数字格式打印年份
  date +%m  表示月份
  date +%d 表示日期
  date +%H 表示小时
  date +%h 表示月(英文)
  date +%M 表示分钟
  date +%S 表示秒
  date +%w 表示星期。结果显示0则表示周日。
date  
Tue May 29 15:52:08 CST 2018
  
#2018年
  
date +%Y
  
2018
  
#18年
  
date +%y
  
18
  
#月
  
date +%m
  
05
  
#分钟
  
date +%M
  
52
  
#日
  
date +%d
  
29
  
#月-日-年
  
date +%D
  
05/29/18
  
#年-月-日
  
date +%F
  
2018-05-29
  
#时间戳,距离1970年1月1日0点0分0秒到现在有多少秒
  
date +%s
  
1527580544
  
#当前的时间,精确到秒
  
date +%T
  
15:59:37
  
#同上,跟date +%T一样的效果
  
date +%H:%M:%S
  
16:01:55
  
#星期2,周二,周日是0
  
date +%w
  
2
  
#今年的第几周,第22周
  
date +%W
  
22
  日期格式支持组合
  年月日表示:20180529
[root@AliKvn shell]# date +%Y%m%d  
20180529
  日历形式查看日期
[root@AliKvn shell]# cal  
      May 2018
  
Su Mo Tu We Th Fr Sa
  
  1  2  3  4  5
  
6 7  8  9 10 11 12
  
13 14 15 16 17 18 19
  
20 21 22 23 24 25 26
  
27 28 29 30 31
#一天前  
date -d "-1 day"
  
Mon May 28 16:09:17 CST 2018
  
#日期可以组合+%F使用
  
date -d "-1 day" +%F
  
2018-05-28
  
#一个月前
  
date -d "-1 month" +%F
  
2018-04-29
  
#一年前
  
date -d "-1 year" +%F
  
2017-05-29
  
#时间可以用+%T组合
  
date -d "-1 hour" +%T
  
15:13:01
  
#date +%s 时间戳
  
#时间戳换算标准时间格式
  
date +%s
  
1527581785
  
date -d @1527581785
  
Tue May 29 16:16:25 CST 2018
  
#时间格式转换时间戳
  
date +%s -d  "2018-05-29 16:19:00"
  
1527581940
  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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-554418-1-1.html 上篇帖子: 当 Shell 遇见 Emacs -- 大话 Emacs Shell Mode 下篇帖子: 20150913-0915 shell,sed,awk
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表