.sh的就是shell脚本
shell程序时以文件形式存放批量的Linux命令集合。该文件能被Shell解释执行。
通常由一段Linux命令、shell命令、控制语句以及注释语句构成。
shell脚本编写
shell脚本是纯文本,可以使用任何文本编辑器编写。
shell脚本通常以.sh为后缀。
除第一行以外,其他行的#都表示注释。
shell的第一行
需要制定能程序来编译和执行脚本。
一般.sh连接的是bash这个目录,多以第一行一般写
#!/bin/bash
变量
变量名
变量名必须以字母或下划线开头,后面介意跟字母、数字或下划线。任何其它字符都标志变量名的结束。
变量名关于大小写敏感。
赋值
给变量名赋值时禁止空格
name=temmie
这时使用echo $name,会返回temmie
变量名的引用
$变量名
或
${变量名}
变量类型
根据变量的作用域,可以分为本地变量和环境变量
本地变量只在创建它们的shell中可以使用,环境变量可以在所有的用户进程使用,也叫全局变量。
环境变量需要大写,惯例
环境变量在用户主目录中的.bash_profile中,使用export 变量名=赋值 来导出变量
然后source .bash_profile来使变量生效就可以使用了。
显示变量
set就可以显示所有变量
位置参量
是一组特殊的内置变量,通常被shell脚本用来从命令行接收参数,或被函数用来保存传递给它的参数。
就相当于python函数的实参,是你给脚本输入的参数。
每一个字符串是一个位置参量,不同参量用空格隔开。如果位置参量中包含空格要使用引号包含这个参量。
使用这些参数时,用$1表示第一个参数,$2表示第二个参数…大于9后需要写成${10}${11}(1-9的也可以使用花括号括起来)
$0 | 当前脚本的文件名 |
---|---|
$1-$9 | 第1-9个位置参量 |
${10} | 第10个位置参量,后面类推 |
$# | 位置参量的个数 |
$* | 以单字符串显示所有位置参量 |
$@ | 为加双一号时域$*含义相同,加双引号 |
$$ | 脚本运行的当前进程号 |
$! | 最后一个后台运行的进程号 |
$? | 显示前面最后一个命令的退出状态,0表示没有,其他任何值表示有错误,用来查看错误,如果有错误应该停止运行 |
执行脚本
. 脚本名.sh
或
sh 脚本名.sh
数组
数组定义
用括号表示
a=(b c d)
echo $a
数组索引
echo ${a[num]}#显示num位置处的值,num从0开始
echo ${a[*]}#显示数组中所有内容
echo ${#a[*]}#显示数组中元素个数
a[0]=1#数组的赋值
date
显示时间
date +%Y-%m-%d-%H-%M-%S#后面是匹配格式,年、月、日、时、分、秒,如果不记得格式符号可以info或man来查询
如果在脚本中使用date,需要写成
$(date)
2天以前
$(date --date='2 days' +%Y-%m-%d)
如果是明天就改成-1 days,以此类推。
cal
日历
查看一年的某一月份
cal 09 2018#查看18年9月的日历
判断
文件类型判断
-e | 判断是否存在exist的缩写 |
---|---|
-f | 是否存在且未file文件 |
-d | 是否存在且未目录(dictionary) |
文件权限判断
-r | 文件是否有可读权限 |
---|---|
-w | 文件是否有可写权限 |
-x | 文件是否有可执行权限 |
两个整数之间的判定
a -eq b | a等于b |
---|---|
a -ne b | a不等于b |
a -gt b | a大于b |
a -lt b | a小于b |
a -ge b | a大于等于b |
a -le b | a小于等于b |
判断字符串的数据
-z str | 判断str是否为0,空字符串返回true |
---|---|
-n str | 判断str是否非零 |
str1=str2 | 判断str1是否等于str2 |
str1!=str2 | 判断str1是否不等于str2 |
判断符号
test 或者使用方括号
if判断
if [条件判断式];then
当条件判断式成立时,可以进行的指令内容工作
fi
fi是结束的意思
多重判断
if [条件判断式];then
当条件判断式成立时,可以进行的指令工作内容;
else
当条件判断式不成立时,可进行指令工作内容;
fi
if [条件判断式1];then
当条件判断式成立时,可以进行的指令工作内容;
elif[条件判断式2];then
当条件判断式成立时,可以进行的指令工作内容;
....
else
当条件判断式不成立时,可进行指令工作内容;
fi
for循环
for var in 1 2 3 4 5
do
指令
done
for((i=0;i<n;i=i+1))
do
指令
done
while循环
状态判断式为false时停止执行
while [状态判断式]
do
程序
done
状态判断式为true时停止执行
untill [状态判断式]
do
程序
done
默认值
给c赋值a,如果没有a,默认给c赋值b
c={a:-b}
从文件或命令中逐行读取
读取file文件的内容
cat file|while read line
do
echo $line
done