shell script

Posted GGBeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell script相关的知识,希望对你有一定的参考价值。

摘要:概述、script的编写

一、概述

【什么是shell script】

针对shell所写的脚本,将多个命令汇整起来一起执行

可以进行类似程序的编写,并且不需要经过编译就能够执行

利用shell的功能所写的一个“程序”,这个程序是使用纯文本文件,将一些shell的语法与命令写在里面,搭配正则表达式、管道命令与数据流重定向等功能,以达到我们所想要的处理目的。

【用途】

简化我们日常的工作管理

一些服务的启动都是通过shell script进行的

 

二、编写第一个Hello world程序

【预处理】

新建一个script文件:vi helloworld.sh

【代码】

技术分享
1 #!bin/bash
2 # Program:
3 #       This is my first script.
4 # History:
5 # 2017-9-30 liuyu First release
6 
7 echo "Hello World!"
8 exit 0
View Code

 

说明:

#!bin/bash:声明这个script使用的shell名称

声明这个文件内是使用bash的语法,即这个程序被执行时,它就能够加载bash的相关环境配置文件(一般来说就是non-login shell的~/.bashrc),并且执行bash使我们下面的命名能够执行。

exit 0:告知执行结果

我们可以利用exit这个命令来让程序中断,并且回传一个数值给系统。如“exit 0”代表离开script并且回传一个0给系统,即我们执行完这个script后,若接着执行echo $?则可得到0的值。

【执行script程序】

bash 文件名

 

三、简单的shell script练习

1. 交互式脚本:变量内容由用户决定

题目:请你以read命令的用途,编写一个script,它可以让用户输入firstname与lastname,最后并且在屏幕上显示“Your full name is: ”的内容。

技术分享
 1 #!bin/bash
 2 # Program:
 3 #       an easy interactive program
 4 # History:
 5 # 2017-9-30 liuyu First release
 6 
 7 
 8 read -p "Please input your firstname: " firstname
 9 read -p "please input your lastname: " lastname
10 echo "Your full name is $firstname $lastname!"
View Code

 

2. 把日期作文件名:利用日期进行文件的创建

题目:我希望将每天的数据备份在不同的文件里,所以就需要以每天的日期作为文件名。关键是日期怎么来!假设我要创建3个空的文件,文件名最开头由用户决定(我们假设是filename),那今天的日期是2017/9/30,我想以前天、昨天、今天的日期来创建这些文件,即filename20170928, filename20170929, dilename20170930,该如何是好?

技术分享
 1 #!bin/bash
 2 # Program:
 3 #       filename is created by users input.
 4 # History:
 5 # 2017-9-30 liuyu First release
 6 
 7 echo "I will use ‘touch‘ to create three files."
 8 read -p "Please input your filename: " fileuser
 9 
10 #开始判断有否配置文件名,防止用户随意按[Enter],我们默认开头为filename
11 filename=${fileuser:-"filename"}
12 
13 date1=$(date --date=2 days ago +%Y%m%d) #前两天的日期
14 date2=$(date --date=1 days ago +%Y%m%d)
15 date3=$(date +%Y%m%d)                   #今天的日期
16 file1=${filename}${date1}       #追加的方式配置文件名
17 file2=${filename}${date2}
18 file3=${filename}${date3}
19 
20 touch "$file1"  #防止有空格
21 touch "$file2"
22 touch "$file3"
View Code

 

说明:此程序运用了许多bash中的变量知识,所以学好shell才能轻松地编写script!

3. 数值运算:简单的加减乘除

题目:让用户输入两个整数,然后计算出这两个数相乘的结果。

技术分享
 1 #!bin/bash
 2 # Program:
 3 #       multiply two integer.
 4 # History:
 5 # liuyu 2017-9-30 First release
 6 
 7 echo "You should input 2 integers,i will cross them!"
 8 read -p "first number: " firnum
 9 read -p "second number: " secnum
10 total=$(($firnum*$secnum))
11 echo "The result of $firnum*$secnum is $total."
View Code

 

 

四、test命令的测试功能

1. 功能

检测系统上面某些文件、测试文件的相关属性。

2. 常用命令

命令 意义
test -e filename 该文件名是否存在
test -f filename 该文件名是否存在且为文件
test -e filename 该文件名是否存在且为目录
test -S filename 该文件名是否存在且为一个Socket文件
test -L filename 该文件名是否存在且为一个连接文件
test -r filename 该文件名是否存在且具有“可读”的权限
test -w filename 该文件名是否存在且具有“可写”的权限
test -x filename 该文件名是否存在且具有“可执行”的权限
test file1 -nt file2  判断file1是否比file2新
test file1 -ef file2 判断file1与file2是否为同一个文件,主要用于hard link
test n1 -eq n2 两数值相等
test n1 -gt n2 n1大于n2
test n1 -lt n2 n1小于n2
test n1 -ge n2 n1大于等于n2
test n1 -le n2 n1小于等于n2
test -z string 判断是否为空字符串,若是,返回true
test str1=str2  判断str1是否等于str2
-a 两个条件同时成立,如test -r file -a -x file,则file同时具有r与x权限时,才回传true
-o 任何一个条件成立,如test -r file -o -x file,则file具有r或x权限时,就可回传true
! 反向状态,如test ! -x file,当file不具有x时,才回传true

3. 示例

题目:写一个script,让用户输入一个文件名,要求进行下面的判断:

这个文件是否存在,若不存在则给予一个“Filename does not exist”的信息,并中断程序;

若这个文件存在,则判断它是个目录或文件,结果输出“Filename is regular file”或“Filename is directory”;

判断一下,执行者的身份对这个文件或目录所拥有的权限,并输出权限数据。

技术分享
 1 #!bin/bash
 2 # Program:
 3 #       A script which covers the using of test.
 4 # History:
 5 # 2017-9-30 liuyu First release
 6 
 7 echo "Please input a filename, I will check the filename‘s type and permission."
 8 read -p "Input a filename: " filename
 9 test -z $filename && echo "You must input a filename." && exit 0
10 
11 test ! -e $filename && echo "The filename ‘$filename‘ DO NOT exist" && exit 0
12 
13 test -f $filename && filetype="regular file"
14 test -d $filename && filetype="directory"
15 test -r $filename && perm="readable"
16 test -w $filename && perm="writable"
17 test -x $filename && perm="executable"
18 
19 echo "The filename: $filename is a $filetype"
20 echo "And the permissions are : $perm"
View Code

 

 

五、判断符号[]的使用

 

以上是关于shell script的主要内容,如果未能解决你的问题,请参考以下文章

用于确保在任何给定时间仅运行一个 shell 脚本的 shell 片段 [重复]

shell 脚本 片段

vue2.0 代码功能片段

源 shell 脚本的退出代码

为啥浏览器不在通过 fetch API 检索的 HTML 片段中运行 <script>? [复制]

nodejs常用代码片段