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
说明:
#!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!"
2. 把日期作文件名:利用日期进行文件的创建
题目:我希望将每天的数据备份在不同的文件里,所以就需要以每天的日期作为文件名。关键是日期怎么来!假设我要创建3个空的文件,文件名最开头由用户决定(我们假设是filename),那今天的日期是2017/9/30,我想以前天、昨天、今天的日期来创建这些文件,即filename20170928, filename20170929, dilename20170930,该如何是好?
1 #!bin/bash 2 # Program: 3 # filename is created by user‘s 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"
说明:此程序运用了许多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."
四、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"
五、判断符号[]的使用
以上是关于shell script的主要内容,如果未能解决你的问题,请参考以下文章
用于确保在任何给定时间仅运行一个 shell 脚本的 shell 片段 [重复]