Linux学习笔记之Shell Scripts

Shell Scripts

什么是shell Scripts

  字面了解为针对shell所写的脚本,即利用shell的功能所写的一个程序,该程序使用纯文本文件,其包括shell的语法与指令,搭配正则表达式、管道命令与数据流重定向等功能,已达到理想的处理目的。shell Script在处理数据的速度上不占优势,因为shell scrpit用的是外部的指令与bash shell的一些默认工具,在使用时,通常会转到外部的函数库中执行,因此,相比传统的程序语言,其速度不快。shell script在系统管理上是一项很好的工具,但不能够用于处理大量的数值运算,一则速度慢,二则占用cpu资源较多,会造成主机资源的分配不良。

编写shell script

#!/bin/bash
#program:
#       This program show "Hello World!"in your screen.
#History:
#2019/08/13     aaron   First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello World! \a \n"
exit 0

 第一行#!/bin/bash 表示该script所使用的shell名称,终端默认使用的是bash shell

其余以#开头的都是注释信息

PATH为bash shell的环境变量,通过添加路径,可以直接在命令行执行.sh文件

利用date命令 建立文件,该文件名的名称随日期变化

#History:
#2019/08/13     aaron   First release
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:~/bin
export PATH

echo -e "I will use 'touch' command to create 3 files."
read -p "Please input your filename: " filename
filename=${fileuser:-"filename"}
date1=$(date --date='2 days ago' +%Y%m%d)
date2=$(date --date='1 days ago' +%Y%m%d)
date3=$(date +%Y%m%d)
file1=${filename}${date1}
file2=${filename}${date2}
file3=${filename}${date3}

touch "${file1}"
touch "${file2}"
touch "${file3}"

exit 0

在编写script时尤其要注意语句的间隔符,多了没事(会当作1个空格符),少了则不符合语句规则

小指令:$(command)

var=$((运算内容))

算数高级运算指令bc

 script的执行方式差异

执行方式:source、sh script、./script

直接执行方式:该执行方式会使用一个新非bash环境来执行脚本内的指令,即script是在子程序的bash内执行的,script内建立的本地变量不会传到父程序中

source执行方式:该执行方式是在父程序中执行,各项动作都会在源bash中生效

判断

test命令(并不会直接显示结果,可以通过echo $?来查看,如果是0表示存在,1表示不存在)

test  -e  filesname        filename是否存在

test  -f  filename           filename是否为普通文件

test  -d  filename          filename是否为文件夹

test  -b  filename          filename是否为block device装置

test  -c  filename          filename是否为character device装置

test  -s  filename          filename是否存在且为非空文件

test  -r  filename          filename是否具有可读权限

test  -w  filename         filename是否具有可写权限

test  -x  filename          filename是否具有可执行权限

test  file1 -nt  file2        判断file1是否比file2新

test  file1  -ot  file2        判断file1是否比file2旧

test  file1  -ef  file2        判断file1与file2是否为同一个文件,即指向同一个inode

只列出一小部分test相关的操作

[]判断

用法:使用方法与test 一模一样,只是[]常用在if……then……fi中

注意事项:[]在进行判断是其内部两端需要有空格;

     在[]中的内阁组件都余姚有空格来分隔;

     在[]中的变量,最好用双引号引起来;

     在[]中的常量,最好都以单引号或双引号括起来。

shell script的默认变量

script脚本  restart         表示重新启动这script脚本

script脚本  stop          关闭该服务

带参数的script脚本

命令行:script名  参数1 参数2  参数3

    $0   $1  $2  $3

特殊变量:$#  表示命令后有几个参数

     $@  表示“$1” “$2” “$3” “$4” 即将每个变量用双引号括起来

     $*  表示“$1c$2c$3c$4” c表示分隔符(默认为空格)

shiftNUM 参数偏移

shift 默认为删除最前面的1个参数

NUM为数字可以表示删除最前面的NUM个参数

#!/bin/bash

echo "This script name is ${0}"
echo "Total paras number is $#"
echo "The whole paras is \"$@\""
#删除one
shift    
echo "This script name is ${0}"
echo "Total paras number is $#"
echo "The whole paras is \"$@\""
#删除two
shift
echo "This script name is ${0}"
echo "Total paras number is $#"
echo "The whole paras is \"$@\""
shift
echo "This script name is ${0}"
echo "Total paras number is $#"
echo "The whole paras is \"$@\""

执行结果

原文地址:https://www.cnblogs.com/aaronbin/p/14323897.html