Shell编程进阶1.1-1.4笔记

回复 收藏
shell脚本简介
shell脚本首先是一个脚本,并不是真正的编程语言,他只能运行在linux的shell中,所以叫shell脚本。说白了shell脚本就是一些命令的集合。
比如,想要实现以下的操作:
1.     进入/tmp/目录
2.     列出当前目录中所有文件名
3.     把所有当前的文件拷贝到/root/目录下
4.     删除当前目录下的所有文件
这四部操作需要在shell窗口中敲4次命令,如果是更加复杂的几十次操作,一次次的敲键盘会很麻烦。所以不妨把所有的操作记录到一个文档中,然后调用文档中的命令,这样一步操作就可以完成,这个文档就是shell脚本,当然这个shell脚本有它特殊的格式。
shell脚本能帮助我们很方便的去管理服务器,我们可以制定一个计划任务去执行一个shell脚本实现我们的需求。在正式写shell脚本之前,有一个建议,凡是自定义的脚本都放到/usr/local/sbin/下,这样做的目的是,一来可以更好地管理文档,二来以后接管你的管理员都知道自定义的脚本放在哪里,方便维护。
shell结构以及执行
       下面我们来写第一个shell脚本:
       cd/usr/local/sbin
       vimfirst.sh
              加入以下内容:
              #!/bin/bash
              date
              echo"Hello world"
shell脚本通常都是以.sh为后缀名的。shell的第一行一定要以#!/bin/bash开头,表名该文件使用的是bash语法。
用sh命令运行脚本:
sh first.sh
可以加上-x选项查看这个脚本的执行过程,这样有利于我们调试这个脚本哪里有问题
sh -x first.sh
还可以这样运行:
chmod a+x first.sh
./first.sh  (相对路径)
/usr/local/sbin/first.sh  (绝对路径)
date命令
       date命令在shell脚本中使用非常频繁
       直接用date可以显示当前的时间
       查看日历用cal命令,加上-y可以查看整年的日历
       date的几个用法:
1.     输出四位的年、月、日,格式2016-05-31
date +%Y-%m-%d
2.     输出两位的年、月、日,格式16-05-31
date +%y-%m-%d
3.     另一种输出年月日的方式
date +%F
4.     输出时间,格式10:52:15
date +%H:%M:%S
5.     另一种输出时间的方式
date +%T
6.     时间戳
date +%s
返回的值是现在距离1970-1-10:0:0一共有多少秒
7.     根据时间戳反向推测时间
date -d @ 1464692090
8.     一天后
date -d "+1day"
9.     一天前
date -d "-1day"
10.   一个月前
date -d "-1month"
11.   一分钟前
date -d "-1min"
12.   星期
date +%w
date +%W
小写w表示周几,大写W表示本年的第几周
13.   手动调整时间
date -s "2016-05-31 11:03:45"
14.   自动调整时间
yum install –y ntp
ntpdate [时间服务器]
例如:ntpdate ntp.windows.com
       ntpdatentp.fudan.edu.cn
shell自定义变量
当一个路径在脚本中出现多次,你想修改这个路径时就需要修改很多次,很麻烦,并且脚本显得不简洁。变量的作用就是来解决这个问题的。
变量定义很简单,[变量名]=[值]等号的两边不能有空格
变量的使用也很简单,只要在变量名前加上$符号即可
vim 123.sh
       #!/bin/bash
       d=`date +%H:%M:%S`
       echo "One : $d"
       echo "Now sleep 2s"
       sleep 2
       d1=` date +%H:%M:%S `
       echo "Two : $d"
数学运算
在shell中也是经常会用到数学运算的,变量需要用[ ]括起来
vim jia.sh
       #!/bin/bash
       a=1
       b=2
       sum=$[$a+$b]
       echo "$a+$b=$sum"
vim cheng.sh
       #!/bin/bash
       a=3
       b=2
       c=$[$a*$b]
       echo "$c"
vim chu.sh
       a=10
       b=3
       c=$[$a/$b]
       echo "$c"
在除法的运算中,结果为3并不是一个小数,这是应为shell默认是不支持小数的。我们需要小数时怎么做呢,这就需要借助bc,bc是linux系统里面的计算器,如果没有先安装一下yum install –y bc
       echo "scale=2;10/3"|bc
和用户交互
shell脚本可以实现让用户去输入变量的值
vim read.sh
       #!/bin/bash
       read -p "input a number:" x
       read -p "input another number:"y
       sum=$[$x+$y]
       echo "sum=$sum"
当然也可以给read加上超时限制,超过指定时间没有输入值就会自动退出,加上-t
       read -t 10 -p "input a number:"x
shell脚本预设变量
有时我们会用到这样的命令/etc/init.d/iptablesrestart前边的/etc/init.d/iptables就是一个shell脚本,为什么后面可以跟一个restart?这里就涉及到shell脚本的预设变量。实际上,shell脚本在执行的时候后边可以跟参数的,而且还可以是多个。
shell脚本预设的变量有0、1、2、3,其中0是脚本的名字,运行脚本时后边跟的参数分别对应变量1、2、3。
vim 456.sh
       #!/bin/bash
       echo "\$0=$0"
       echo "\$1=$1"
       echo "\$2=$2"
       echo "\$3=$3"
sh 465.sh 1 2 3
              执行结果:
              $0=456.sh
              $1=1
              $2=2
              $3=3

2016-05-31 19:38 举报
已邀请:

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: