shell编程100例—学习
持续更新中,今年要好好学习shell呀。
原文章连接:shell编程100例
1、编写hello world脚本
[root@bigdata04 study_shell_100]# cat file1.sh
#!/bin/env bash
#编写hello world脚本
echo "hello world"
[root@bigdata04 study_shell_100]# file1.sh
hello world
2、通过位置变量创建 Linux 系统账户及密码
[root@bigdata04 study_shell_100]# cat file2.sh
#!/bin/env bash
#通过位置变量创建linux系统账户及密码
#$1是执行脚本的第一个参数,$2是执行脚本的第二个参数
useradd "$1"
echo "$2" | passwd --stdin "$1"
知识点:
1)建立用户帐号:useradd 用户名
[root@bigdata04 study_shell_100]# useradd big
帐号建好之后,再用 passwd 设定帐号的密码
2)更改用户名密码:passwd 用户名
[root@bigdata04 study_shell_100]# passwd big
Changing password for user big.
New password:
BAD PASSWORD: The password is shorter than 7 characters
Retype new password:
passwd: all authentication tokens updated successfully.
3)位置变量
参考文章:shell中$*,$@,$#
的区别
参考文章:linux shell 中的位置变量
$@
和 $*
只在被双引号包起来的时候才会有差异
01)双引号括起来的情况:
$*
将所有的参数认为是一个字段
$@
以 默认为空格 来划分字段,如果空格在“”里面,不划分。
02)没有括起来的情况是$@
和$*
一样的,见到空格就划分字段。
$#
是 程序的 参数个数(不包括$0
)
$?
获取上一次命令执行的返回值,一般 执行 成功 返回0。
$0 $1 $2
以此类推,取命令行参数,如 test.sh a b c ,则 $0
是 test,$1
是 a, $2
是b,$3
是c。
案例:
for name in xp wrg lct
do
useradd $name
echo red | passwd --stdin $name
done
解释:passwd --stdin $name
是更改$name
变量的密码,$name
变量指代上面for循环的三个用户xp ,wrg, lct
加上--stdin是接受echo后面的字符串(red)做为密码,密码是red
意思就是,创建三个用户:xp ,wrg, lct
密码都是:red
3、备份日志,每周 5 使用 tar 命令备份/var/log 下的所有日志文件
解题思路:第一步编写日志备份脚本,第二步编写定时任务、执行日志备份的脚本
第一步编写日志备份脚本
[root@bigdata04 study_shell_100]# cat file3.sh
#!/bin/env bash
#需求:每周 5 使用 tar 命令备份/home/study/shell_study/study_shell_100 下的所有文件
#脚本路径:/home/study
tar czf log-`date +%Y%m%d`.tar.gz ./study_shell_100
第二步编写定时任务
# crontab ‐e #编写计划任务,执行备份脚本
#每周五的3 : 00执行脚本file3.sh
00 03 * * 5 /home/study/file3.sh
知识点:
1)压缩文件
tar命令可以用来压缩打包单文件、多个文件、单个目录、多个目录。
常用格式:
单个文件压缩打包 tar czvf my.tar file1
多个文件压缩打包 tar czvf my.tar file1 file2,...
单个目录压缩打包 tar czvf my.tar dir1
多个目录压缩打包 tar czvf my.tar dir1 dir2
2)定时任务
Linux下创建定时执行任务可使用crontab,系统默认自带crontab。
参考文章:设置定时执行任务