浏览 578 次
锁定老帖子 主题:shell脚本自学笔记
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2020-03-05
shell脚本并不能作为正式的编程语言,因为它是在linux的shell中运行的,所以称为shell脚本。事实上,shell脚本就是一些命令的集合。 假如完成某个需求需要一口气输入10条命令,对于简单的命令,我们可以直接在shell窗口中输入,但如果是比较长且复杂的命令,一次一次敲就会显得很麻烦。我们可以把这10条命令都记录到一个文档中,然后去调用文档中的命令,这样就能一步操作完成,以后再遇到这个需求的时候也只需要调用这个文档就行了,这个文档就是shell脚本,只是这个文档有它特殊的格式。 shell脚本能帮我们很方便地管理服务器,我们可以指定一个任务计划,定时去执行某个shell脚本以满足需求。 二、shell脚本的创建和执行 下面来编写第一个脚本: vim first.sh #写入下面内容 #!/bin/bash ## This is my first shell script. ## Writen by lzx 2018-7-27 date echo "Hello World!" shell脚本通常都以.sh作为后缀名,不是说不加.sh的脚本不能运行,只是大家的习惯,这样也方便辨识。 上面,第一行要以#!/bin/bash开头,表示该文件使用的是bash语法,不设置该行也可以执行,但不符合规范。 #表示注释,后面跟一些该脚本的相关注释内容,以及作者、创建日期或版本等。注释可以省略,但不建议省略,因为我们的记忆力有限,没有注释我们自己都不知道自己写的脚本是用来干什么的、是什么时候写的。建议从一开始就要养成写脚本的良好习惯,方便自己也方便他人。 下面来执行上面的脚本: # sh first.sh #用sh命令来执行 2018年 07月 27日 星期五 09:42:54 CST Hello World! 还有一种执行方式: # ./first.sh #./表示当前目录 -bash: ./first.sh: 权限不够 # chmod +x first.sh #给执行权限 # ./first.sh 2018年 07月 27日 星期五 09:44:09 CST Hello World! 使用上面方法来执行shell脚本的前提是脚本本身有执行权限,所以需要给脚本加一个x权限。 另外,使用sh命令来执行脚本时,可以加-x选项来查看脚本的执行过程: # sh -x first.sh + date 2018年 07月 27日 星期五 09:49:22 CST + echo 'Hello World!' Hello World! 三、命令date # date #显示当前时间 四、Shell脚本中的变量 shell脚本中的变量可以是一个数值、一个命令或者一个路径。定义变量的格式为:变量名=变量的值,在脚本中引用变量的值时需要加上符号$。 五、数字运算 在脚本中进行数字运算,也会用到变量。 下面再自定义一个脚本: #! /bin/bash ## For get the sum of two numbers. ## Writen by lzx 2018-7-27 a=1 b=2 sum=$(($a+$b)) echo "$a+$b=$sum" 1+2=3 数学计算要用((…))括起来,并且前面要加上符号$。 六、获取用户输入 read命令用于和用户交互,它把用户输入的字符串作为变量值,用法如下: #!/bin/bash ## Using 'read' in shell script. ## Writen by lzx 2018-7-27 read -p "Please input a number:" x read -p "Please input another number:" y sum=$[$x+$y] echo "The sum of two numbers is:$sum" Please input a number:5 Please input another number:11 The sum of two numbers is:16 七、if语句 不带else 具体格式如下: if 判断语句;then command fi 下面自定义一个脚本: #!/bin/bash read -p "Please input your score: " a if ((a<60));then echo "You didn't pass the exam." fi 上面出现了((a<60))这样的形式,表示里面的是一个数学运算,(( ))这是shell脚本特有的格式,只用一个小括号或不用括号都会报错,要记住这个格式。 带有else 具体格式如下: if 判断语句 then command else command fi 带有elif 具体格式如下: if 判断语句1;then command elif 判断语句2;then command else command fi 判断数值大小除了可以使用(( ))的形式外,还可以使用[],但不能使用>、<、=这样的符号了,要使用-lt(小于)、-gt(大于)、-le(小于或等于)、-ge(大于或等于)、-eq(等于)、-ne(不等于)。 八、和文档相关的判断 shell脚本中if还经常用于判断文档的属性,比如判断是普通文件还是目录,判断文件是否可读、写、执行权限等。 if 常用的选项有以下几个: -e :判断文件或目录是否存在 -d :判断是不是目录以及是否存在 -f :判断是不是普通文件以及是否存在 -r :判断是否有读权限 -w :判断是否有写权限 -x :判断是否有执行权限 具体格式如下: if [ -e filename ] then command fi 示例如下: # if [ -d /home/ ]; then echo ok; fi ok # if [ -f /home/ ]; then echo ok; fi /home/是目录而非文件,所以在判断它是否为文件时并不会显示ok。 九、case逻辑判断 在shell脚本中,除了使用if来判断逻辑外,还可以使用case。 具体格式如下: case 变量 in value1) command ;; value2) command ;; value3) command ;; *) command ;; esac 下面自定义一个脚本: #!/bin/bash read -p "Input a number: " n a=$[n%2] case $a in 1) echo "The number is odd." # odd:奇数 ;; 0) echo "The number is even." # even:偶数 ;; *) echo "It's not a number!" esac case脚本常用于编写系统服务的启动脚本。 十、for循环 具体格式如下: for 变量名 in 循环的条件 do command done 下面自定义一个脚本: #!/bin/bash for i in `seq 1 5`; do # seq 1 5 表示从1到5的一个序列 echo $i done 上面,循环的条件是引用系统命令的执行结果seq 1 5,但必须用反引号括起来。 十一、while 日常运维工作中,也会经常用while循环来编写死循环的脚本,用于监控某项服务。 具体格式如下: while 条件 do command done 下面自定义一个脚本: #!/bin/bash a=6 while [ $a -ge 1] do echo $a a=$[$a-1] done 另外,可以用一个冒号:代替循环条件,这样就可以做到死循环。 十二、exit exit,它作用的范围更大,直接退出整个shell脚本 目前这些是我们常用的,毕竟咱不是搞运维的,更多的是用它写一写简单的脚本来存储命令。下面我将以px4安装脚本为例说明shell脚本使用: ———————————————— shell脚本快速入门 http://www.makeru.com.cn/live/3485_1489.html?s=45051 linux基础 http://www.makeru.com.cn/course/details/2058?s=45051 快速上手linux http://www.makeru.com.cn/live/1758_310.html?s=45051 Linux网络经典案例 http://www.makeru.com.cn/live/3485_1630.html?s=45051 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |