首先,Shell 是一个程序,提供一个与用户对话的环境。这个环境只有一个命令提示符,让用户从键盘输入命令,所以又称为命令行环境(commandline,简写为 CLI)。
Shell 接收到用户输入的命令,将命令送入操作系统执行,并将结果返回给用户。
其次,Shell 是一个命令解释器,解释用户输入的命令。它支持变量、条件判断、循环操作等语法,所以用户可以用 Shell 命令写出各种小程序,又称为脚本(script)。这些脚本都通过 Shell 的解释执行,而不通过编译。
最后,Shell 是一个工具箱,提供了各种小工具,供用户方便地使用操作系统的功能。
shell脚本实现建库建表,需求是:运维担心建库建表失败,要求用脚本实现并报错。感觉还可以更报错信息还可以更人性化一点。但时间紧就做成这样了。另用Python实现这个功能会更简单,但运维不让用
#!/bin/bash
echo "start"
# 1.解压sql。压缩包
echo "解压sql"
unzip -zxvf /Users/用户名/Documents/test/shellMysqlTest/ddl_data.zip -C /Users/用户名/Documents/test/shellMysqlTest
echo "目录赋予权限"
chmod -R 777 /Users/用户名/Documents/test/shellMysqlTest
# 2.连接mysql,密码作为入参传入
# 3.运行建表ddl,并记录结果,需要知道哪张表失败了
# 4.运行插入数据的sql,并记录结果,需要知道哪张表失败了
cmd1="source /Users/用户名/Documents/test/shellMysqlTest/books.sql;"
cmd2="source /Users/用户名/Documents/test/shellMysqlTest/books_data.sql;"
cnt1=$(mysql -uroot -p$1 -s -e "${cmd1}")
echo "建表失败"
exit
cnt2=$(mysql -uroot -p$1 -s -e "${cmd2}")
echo "插入数据失败"
exit
echo "全部完成"
exit
当然Shell能实现的功能还有很多,监控进程、系统负载、CPU和内存使用情况等。有一道面试题让我印象深刻,按照ip统计访问量并写入数据库也可以实现,上代码
#!/bin/bash
#accessdabase
datetime=`date +%Y-%m-%d`
tempfile=temp.txt
logfile="/var/log/nginx/access.log-`date +%Y%m%d`.gz"
zcat $logfile | awk '{print $1}'| sort | uniq -c | awk '{print $2":"$1}' > $tempfile
mysql="mysql -uroot -proot"
for i in `cat $tempfile`
do
ip=`echo $i|awk -F: '{print $1}'`
count=`echo $i | awk -F: '{print $2}'`
sql="insert into test1.accesstable(access_time,access_ip,access_count) values('$datetime','$ip','$count')"
$mysql -e "$sql"
done
#sql="create table test1.accesstable(
#id int unsigned not null auto_increment primary key,
#access_time char(50),
#access_ip char(50),
#access_count int(20)
)"
sql="select * from test1.accesstable"
$mysql -e "$sql"
有三点需要注意的:
1.Windows上创建的脚本到linux上运行问题,中文会乱码及回车也会显示报错
2. 脚本中的语法较为严格,如空格
3. try catch的写法
#1
command1
command2
#2 if command1 fails then command2 runs as follows
command1 || command2
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.