shell脚本自动化编程

1、shell概览

shell是一个命令行解释器,它接收应用程序/用户命令,然后调用系统内核。
shell是一个功能强大的编辑语言,易编辑、易调试、灵活性强。

1. shell脚本格式
以**#!/bin/bash**开头(指定解释器)

2.第一个shell脚本:hello world

创建一个shell脚本

 liuxiaoyao@liuxiaoyao-HLYL-WXX9:/$ sudo touch helloworld.sh
	liuxiaoyao@liuxiaoyao-HLYL-WXX9:/$ vi helloworld.sh
**在helloworld.sh里边写入:**
	#!/bin/bash
echo "helloword"

2. 脚本常用执行方式
sh helloworld.sh

bash helloworld.sh
sh或bash + 文件相对路径或绝对路径
3.第二个shell脚本:多命令处理
在/home/atgiugu 里边创建一个banzhang.txt文件,里边写入I love cls
创建文件
cd /home
touch batch.sh
vi batch.sh
里边写入

	 #!/bin/bash/

mkdir atgiugu
cd atgiugu
touch banzhang.txt
echo "I love cls">>banzha

ng.txt

4.shell中的变量
系统变量
常用系统变量
$HOME,$PWD,$SHELL,$USER
自定义变量
定义:

a=8
echo $a
8

撤销:

unset c
echo $c

静态变量:
readonly a=9
echo $a
9
unset a
无法取消设定: 只读 variable
变量定义规则:

  1. 由字母数字下划线组成,但是不能以数字开头,环境变量名建议大写
  2. =两边不能有空格
  3. 在bash中,变量默认都是字符串类型,无法直接进行值字运算
  4. 变量值如果有空格,需要用双吲或者单引号括起来
    export:
    可把变量提升为全局环境变量,可供其他shell程序使用
    定义变量:
 D="lxy xihuan"

编写helloworld.sh:

nano helloworld.sh

写入:

echo "$D"

返回后提升为全局环境变量:

export D

运行helloworld.sh:

./helloworld.sh

特殊变量:$n

基本语法:$1  $9 超过9,用大括号:${10}

例:
创建parameter.sh:

nano parameter.sh

写入:

#!/bin/bash
echo “$0 $1 $2 $3"

给权限:

 chomd 777 parameter.sh

加参数:

sh parameter.sh banzhang love

特殊变量:$#

基本语法:
$#(功能描述:获取所有输入参数个数,常用于循环)

  • ```在上边parameter.sh里边加入$#
显示输入参数个数
**$@ $***
$@与$*的区别:

  $@与$*都可以使用一个变量来来表示所有的参数内容,但这两个变量之间有一些不同之处。

  $@:将输入的参数作为一个列表对象

  $*:将输入的参数作为一个单词

li:
在上边parameter.sh里边加入KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲@$*

!/bin/bash
echo "$0 $1 $2 $3"
echo "$#"
echo "$@"
echo "$*

li:

sh parameter.sh kkk qqq ddd
parameter.sh kkk qqq ddd
3
kkk qqq ddd
kkk qqq ddd

特殊变量$?
判断上一条命令是否正确执行
echo $?
正确:0
错误: n

运算符

expr `expr 3 + 2` \* 4
20
s=$[(2+3)*4]
echo $s
20

条件判断

数字的比较

-eq 等于

-ne 不等于

-gt 大于

-lt 小于

-ge 大于等于

-le 小于等于
例:

[ 77 -eq 77 ]
echo $?
0

文件属性相关判断

-e 文件(包括目录)是否存在

-d 是否是目录

-f 是否是普通文件

-L 是否是链接文件

-S 是否是socket文件

-p 是否是管道文件

-s 文件大小是否存在并且为非空文件,无法判断非空目录;注意存在且非空才返回true

文件权限相关的判断

-r 当前用户是否可读

-w 当前用户是否可写

-x 当前用户是否可执行

-u 是否有suid(权限9位的前3位里是否有s位)

-g 是否sgid(权限9位的中间3位里是否有s位)

-k 是否有t位(权限9位的后3位里是否有t位)

测试时需要注意最好不要使用root用户,因为root为管理员,他有所有权限

字符串相关的判断

-z 字符串是否为空

-n 字符串是否不为空

str1 = str2 是否相等

str1 != str2 是否不相等

文件新旧比较

file1 -nt file2 file1是否比file2新

file1 -ot file2 file1是否比file2旧

file -ef file2 file1是否和file2指向同一个inode

if 条件判断

if的基本语法:

if [ command ];then

符合该条件执行的语句

elif [ command ];then

符合该条件执行的语句
else
符合该条件执行的语句
fi
例:
创建:

nano if.sh

写入

!/bin/bash

if [ $1 -eq 1 ]
then
        echo "liuxiaoyao zhenshuhai"
elif [ $1 -eq 2 ]
then
        echo "cls zhenmei"
fi

查看:

 bash if.sh 1
liuxiaoyao zhenshuhai
bash if.sh 2
cls zhenmei

case 语句

例:

nano case.sh
!/bin/bash

case $1 in
1)
        echo "banzhang"
;;
2)
        echo "cls"
;;
*)
        echo "renyao"
;;
esac

更多推荐

shell脚本自动化编程