您当前的位置: 首页 > 

cuiyaonan2000

暂无认证

  • 0浏览

    0关注

    248博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Shell教程

cuiyaonan2000 发布时间:2020-06-17 14:26:15 ,浏览量:0

序言

          一个业务复杂,结构复杂的项目需要自动化部署.以此为基础梳理下使用shell语法

Shell

         shell脚本就是一些命令的集合。举个例子,我想实现这样的操作:

  1. 进入到/tmp/目录;
  2. 列出当前目录中所有的文件名;
  3. 把所有当前的文件拷贝到/root/目录下;
  4. 删除当前目录下所有的文件。

       简单的4步在shell窗口中需要你敲4次命令,按4次回车。这样是不是很麻烦?当然这4步操作非常简单,如果是更加复杂的命令设置需要几十次操作呢?那样的话一次一次敲键盘会很麻烦。所以不妨把所有的操作都记录到一个文档中,然后去调用文档中的命令,这样一步操作就可以完成。其实这个文档呢就是shell脚本了,只是这个shell脚本有它特殊的格式。

       有一个问题需要约定一下,凡是自定义的脚本建议放到/usr/local/sbin/目录下,这样做的目的是,一来可以更好的管理文档;二来以后接管你的管理员都知道自定义脚本放在哪里,方便维护cuiyaonan2000@163.com。

【shell脚本的基本结构以及如何执行】

        Shell脚本通常都是以.sh 为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已。所以,以后你发现了.sh为后缀的文件那么它一定会是一个shell脚本了。

       test.sh中第一行一定是 “#! /bin/bash” 它代表的意思是,该文件使用的是bash语法。如果不设置该行,那么你的shell脚本就不能被执行。

       第三行和第四行的’#’表示注释,在前面讲过的。

      Shell脚本的执行很简单,直接”sh filename “ (因为是通过vi创建的一个文件,没有执行权限所以需要借助sh 命令+ 文件名的方式.如果./filename.sh 的方式调用 则需要增加执行权限命令: chmod +x filename.sh cuiyaonan2000@163.com) . 

      另外使用sh命令去执行一个shell脚本的时候是可以加-x选项来查看这个脚本执行过程的,这样有利于我们调试这个脚本哪里出了问题。

Shell的date使用

       上面的Shell脚本中用到了’date’这个命令,它的作用就是用来打印当前系统的时间。使用方法如下所示.

#%Y表示年,%m表示月,%d表示日期,%H表示小时,%M表示分钟,%S表示秒

[root@localhost cuiyaonan2000@163.com]# date "+%Y%m%d %H:%M:%S"
20200617 12:17:33

#这里的是小y 故此值有年份的后两位
[root@localhost cuiyaonan2000@163.com]# date "+%y%m%d %H:%M:%S"
200617 12:19:37


#-d 选项也是经常要用到的,它可以打印n天前或者n天后的日期,当然也可以打印n个月/年前或者后的日期。
#-d 的用法通俗易懂
[root@localhost cuiyaonan2000@163.com]# date -d "-1 day" "+%y%m%d %H:%M:%S"
200616 12:20:58
[root@localhost cuiyaonan2000@163.com]# date -d "+1 day" "+%y%m%d %H:%M:%S"
200618 12:21:05
[root@localhost cuiyaonan2000@163.com]# date -d "+1 month" "+%y%m%d %H:%M:%S"
200717 12:21:12
[root@localhost cuiyaonan2000@163.com]# date -d "+1 year" "+%y%m%d %H:%M:%S"
210617 12:21:19

#显示星期几
[root@localhost cuiyaonan2000@163.com]# date "+%w"
3


Shell变量

    定义变量的格式为 “变量名=变量的值”。当在脚本中引用变量时需要加上’$’符号;

#! /bin/bash

#this my first shell script
#cuiyaonan2000@163.com

date
echo "hello world"

# 表达式使用了 反引号注意 就是d=的后面,cuiyaonan2000@163.com
d=`date +%w`
echo "the script begin at $d"


#表达式中也可以应用外部变量,如下所示
des="现在的时间是:"
d=`${des} date `

# 数学计算要用’[ ]’括起来并且外头要带一个’$’
echo "hello world"

# 表达式使用了 反引号注意 就是d=的后面,cuiyaonan2000@163.com
d=`date +%w`
echo "the script begin at $d"

# 数学计算要用’[ ]’括起来并且外头要带一个’$’
a=1
b=2
sum=$[$a+$b]
echo "result is $sum"

# 获取标准输入获得变量的值
# read x表示x变量的值需要用户通过键盘输入得到
echo "please input a number"
read x
echo "please input another number"
read y
sum=$[$x+$y];
echo "result is $sum"


#也有一种简洁的写法
#read -p 选项类似echo的作用。执行如下:
#read -p "please input a number:" x


echo $0 $1 $2 

        你有没有用过这样的命令”/etc/init.d/iptables restart “ 前面的/etc/init.d/iptables 文件其实就是一个shell脚本,为什么后面可以跟一个”restart”? 这里就涉及到了shell脚本的预设变量。实际上,shell脚本在执行的时候后边是可以跟变量的,而且还可以跟多个。

./test.sh 1 2

其中$1的值就是在执行的时候输入的1,而$2的值就是执行的时候输入的2,当然一个shell脚本的预设变量是没有限制的,这回你明白了吧。另外还有一个$0,不过它代表的是脚本本身的名字。不妨把脚本修改一下。

shell的逻辑判断 if的使用不带else

格式为:

  1. if 判断语句; then
  2. command
  3. fi
read -p "please input you score: " a

#在if1.sh中出现了 ((a            
关注
打赏
1638267374
查看更多评论
0.0438s