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
变量定义规则:
- 由字母数字下划线组成,但是不能以数字开头,环境变量名建议大写
- =两边不能有空格
- 在bash中,变量默认都是字符串类型,无法直接进行值字运算
- 变量值如果有空格,需要用双吲或者单引号括起来
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脚本自动化编程
发布评论