一、第一个script
① 编写习惯
1)内容与功能
2)版本信息
3)作者与联络方式
4)建档日期
5)历史记录
② hello world程序
#!/bin/bash
echo -e "Hello World!! a "
exit 0
③ 运行程序
sh 程序
二、简单实例
① 让用户输入值,再输出到屏幕
read -p “input your firstname” firstname
...
echo -e "your fullename is : ${firstname} ${lastname}"
② 利用data自动创建不同的文档名
date1=$(date --date='2 days ago' +%Y%m%d) 前两天的日期
③ 数值运算
表达方式1:declare -i total=${firstnu}*${secnu}
表达方式2:total=$((${firstnu}*${secnu}))
三、script的执行方式
① sh 程序 直接执行,程序会在子程序bash内执行
② source 程序 程序在父程序bash内执行
四、test指令的测试功能
① test -e 文件 && echo "存在" || echo “不存在” 判断文件是否存在及相关属性
($?:返回值,正确为0,错误为1)
-e:该文件是否存在
-f:该文件是否存在且为 文件(file)
-d:该文件是否存在且为 目录
-r:该文件是否存在且具有 可读 权限
-w:该文件是否存在且具有 可写 权限
-x:该文件是否存在且具有 可执行 权限
-u:该文件是否存在且具有 SUID 属性
-g:该文件是否存在且具有 SGID 属性
-s:该文件是否存在且为 非空文件
② test 文件1 参数 文件2 比较两个文件
参数有如下
-nt:(newer than)判断文件1是否比文件2新
-ot:(older than)
-ef:判断两个文件是否为同一个文件,可用在判断hardlink上,是否都指向同一个inode上。
③ test 数值1 参数 数值2 判断两个整数
参数有如下
-eq:相等(equal)
-ne:不等(not equal)
-gt:大于(greater than)
-lt:小于(less than)
-ge:大于等于
-le:小于等于
④ 判定字符串的数据
test -z string:判定字符串是否为空,若为空,则为true
test -n string:判定字符串是否为非空,若为空,则为false
test str1 == str2:判定两个字符串相等,若相等,则为true
test str1 != str2: 判定两个字符串不相等,若相等,则为false
⑤ 多重条件判定
test -r 文件 -a -x 文件
-a:and
-o:or
!:反向状态
五、判断符号:[ ] 跟test一样的用法
[ "$home" == "$samll" ] 判断两个变量是否相同,每个组件都需要有空格键分隔,变量要用 双引号 括起来
六、shell script的默认变数($0,$1...)
① script的特殊变量如下
$#:代表后接的参数 个数,返回值如 4(个)
$@:代表[ "$1" "$2" "$3" "$4" ],每个变量是独立的
$*:代表[ "$1n$2n$3n$4" ],n为分隔符,默认空格键
$0:执行的脚本档名,$1:第1个参数,$2:第2个参数
② 栗子:直接在执行命令后面带上参数
1) sh 文件 参数1 参数2 参数3
2) 脚本内容:
echo "脚本名称是:${0}"
echo "有几个参数:$#"
echo "参数内容是:$@"
echo "第1个参数是:${1}"
echo "第2个参数是:${2}"
七、参数变量号码偏移(想左移除) shift
shift [n] n是数字,可以一次移除几个参数
八、条件判断式
① if [ 条件判断式 一] ; then
执行的代码
elif [条件判断式二] ; then
执行的代码
else
执行的代码
fi
九、case ...in...esac判断语句
case $变量 in
"第一个变量内容")
执行码
;;
"第二个变量内容")
执行码
;;
*)
执行码
;;
esac
十、function(函数)
function 函数名(){
执行代码
}
十一、loop 循环
①不定循环
while [ 判断式 ]
do
执行代码
done
当满足条件时循环
until [判断式]
do
执行代码
done
当满足条件时终止循环
②固定循环
for 变量名 in 变量值1 变量值2 变量值3 ...
do
执行代码
done
第一次循环时,变量名的内容为变量值1 。。。
③固定循环。 for的另一种写法
for (( 初始值;限制值;执行步阶 )) (( i=1;i<=100;i=i+1 ))
do
执行代码
done
的
十二、shell script的追踪与debug
sh [-nvx] scripts.sh
-n:不要执行script,仅查询语法的问题
-v:再执行script前,先将scripts的内容输出到屏幕上
-x:将使用到的script内容显示到屏幕上。
十三:示例
参考资料1:https://www.cnblogs.com/luoahong/articles/8456203.html
常用shell脚本:https://www.cnblogs.com/ysgcs/p/9938832.html
十四:自己编写的shell
1、当前用户的角色和目录路径
#!/bin/bash #kentee #2020/5/5 #实现自动显示使用者的身份和所在目录 echo -e "您目前的身份是:$(whoami)" echo -e "您目前所在的目录是:$(pwd)" echo -e "现在的日期是:$(date +%m%d)"
2、让用户输入生日,计算出生日是否已过
ntee #2020/5/5 #让用户输入自己的生日(月日),计算出用户的生日还有几天。 read -p "请输入您的生日(几月几日,如:0722):" bir now=`date +%m%d` bir=10#${bir} now=10#${now} if((${bir}==${now}));then echo -e "今天是您的生日!祝您生日快乐!!!" elif ((${bir}<${now}));then echo -e "您的生日已经过了哦!祝您新的一年顺顺利利!!!" else echo -e "您的生日即将到来,好好期待下哦!!!" fi ~
十五:
1、crontab 定时任务
参考资料:https://www.cnblogs.com/ftl1012/p/crontab.html