教你如何在linux中写脚本提高工作效率

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 引入:在工作中,为了在开机前预置一些资源在手机系统中,可能有人会用很多方法去实现这个功能?不过,今天告诉大家一个用shell脚本去拷贝的方法,大家先看看以下代码,看是否能看懂 。

引入:在工作中,为了在开机前预置一些资源在手机系统中,可能有人会用很多方法去实现这个功能?不过,今天告诉大家一个用shell脚本去拷贝的方法,大家先看看以下代码,看是否能看懂 。


#!/bin/bash
PRELOAD_DEST_PICTURES=/data/media/0/Pictures
PRELOAD_FLAG_PICTURES=${PRELOAD_DEST_PICTURES}/.copyfiles
PRELOAD_SOURCE_PICTURES=/vendor/sprd/sprd_media/Pictures
if [ ! -f ${PRELOAD_FLAG_PICTURES} ]
 then
 echo  " ${PRELOAD_SOURCE_PICTURES}/"
   cp -f ${PRELOAD_SOURCE_PICTURES}/Pic1.jpg ${PRELOAD_DEST_PICTURES}
   cp -f ${PRELOAD_SOURCE_PICTURES}/Pic2.jpg ${PRELOAD_DEST_PICTURES}
   cp -f ${PRELOAD_SOURCE_PICTURES}/Pic3.jpg ${PRELOAD_DEST_PICTURES}
   echo "finished" > ${PRELOAD_FLAG_PICTURES}
  echo  " 执行结束 "
fi


以上代码功能很简单,就是把/vendor/sprd/sprd_media/Pictures目录下的几张图片拷贝到/data/media/0/Pictures目录下,然后用一个 .copyfiles 文件是否已经存在去判断是否需要进行拷贝操作,拷贝命令是用Linux命令 。

接下来,我们简单介绍一下上面几行代码的脚本语法规则 :

shell程序的第一行一般都是: #!/bin/sh

/bin/sh指定shell程序被/bin目录下的sh可执行程序执行。

PRELOAD_DEST_PICTURES=/data/media/0/Pictures ,这是Shell变量赋值语句,Shell是弱类型语言,没有类型这个概念。变量定义时可以初始化,使用=进行初始化赋值。注意:shell对语法非常严格,= 两边不能有空格。变量名的命名须遵循如下规则:首个字符必须为字母(a-z,A-Z);中间不能有空格,可以使用下划线;不能使用标点符号;不能使用关键字。


以上代码还有个知识点就是流程控制:

if [....]

  then….

fi

“if” 表达式 如果条件为真则执行then后面的部分 。

通常用” [ ] “来表示条件测试。

注意:这里的空格很重要。shell对语法非常严格,要确保方括号左右两边的空格不能少。

[ -f “somefile” ] :判断是否是一个文件

[ -x “/bin/ls” ] :判断/bin/ls是否存在并有可执行权限

[ -n “$var” ] :判断$var变量是否有值

[ “$a” = “$b” ] :判断$a和$b是否相等

上面的代码,就解释到这边 。看看自己对于这个脚本有没有产生兴趣继续学习,如果有,请继续往下看一个比较复杂的案例 。遇到不懂的自己百度学习,学习这个,应该难不倒聪明的你!


最近在安装阿里云服务器的时候,也看到代码中也有一个卸载阿里云linux一键安装web环境的uninstall.sh脚本。如果你有兴趣继续研究的,不妨把这里面的代码研究看看,我已经把全部的代码写出来了,有兴趣的阅读!

#!/bin/bash
if [ "$1" != "in" ];then
 echo "Before cleaning the installation script environment !"
 echo "Please backup your data !!"
 read -p "Enter the y or Y to continue:" isY
 if [ "${isY}" != "y" ] && [ "${isY}" != "Y" ];then
    exit 1
 fi
fi
mkdir -p /alidata
if which mkfs.ext4 > /dev/null ;then
 if ls /dev/xvdb1 &> /dev/null;then
    if cat /etc/fstab|grep /alidata > /dev/null ;then
     if cat /etc/fstab|grep /alidata|grep ext3 > /dev/null ;then
       sed -i "/\/alidata/d" /etc/fstab
     fi
    else
     echo '/dev/xvdb1             /alidata                 ext4    defaults        0 0' >> /etc/fstab
    fi
    mount -a
 fi
else
 if ls /dev/xvdb1 &> /dev/null;then
    if cat /etc/fstab|grep /alidata > /dev/null ;then
     echo ""
    else
     echo '/dev/xvdb1             /alidata                 ext3    defaults        0 0' >> /etc/fstab
    fi
    mount -a
 fi
fi
/etc/init.d/mysqld stop &> /dev/null
/etc/init.d/nginx stop &> /dev/null
/etc/init.d/php-fpm stop &> /dev/null
/etc/init.d/vsftpd stop &> /dev/null
/etc/init.d/httpd stop &> /dev/null
/etc/init.d/tomcat7 stop &> /dev/null
killall mysqld &> /dev/null
killall nginx &> /dev/null
killall httpd &> /dev/null
killall apache2 &> /dev/null
killall vsftpd &> /dev/null
killall php-fpm &> /dev/null
killall java &> /dev/null
echo "--------> Clean up the installation environment"
rm -rf /usr/local/freetype.2.1.10
rm -rf /usr/local/libpng.1.2.50
rm -rf /usr/local/freetype.2.1.10
rm -rf /usr/local/libpng.1.2.50
rm -rf /usr/local/jpeg.6
echo ""
echo "--------> Delete directory"
echo "/alidata/server/mysql             delete ok!"
rm -rf /alidata/server/mysql
echo "rm -rf /alidata/server/mysql-*    delete ok!"
rm -rf /alidata/server/mysql-*
echo "/alidata/server/tomcat7             delete ok!"
rm -rf /alidata/server/tomcat7
echo "rm -rf /alidata/server/tomcat-*    delete ok!"
rm -rf /alidata/server/tomcat-*
echo "/alidata/server/java             delete ok!"
rm -rf /alidata/server/java
echo "rm -rf /alidata/server/java-*    delete ok!"
rm -rf /alidata/server/java-*
echo "/alidata/server/php               delete ok!"
rm -rf /alidata/server/php
echo "/alidata/server/php-*             delete ok!"
rm -rf /alidata/server/php-*
echo "/alidata/server/nginx             delete ok!"
rm -rf /alidata/server/nginx
echo "rm -rf /alidata/server/nginx-*    delete ok!"
rm -rf /alidata/server/nginx-*
echo "/alidata/server/httpd             delete ok!"
rm -rf /alidata/server/httpd
echo "/alidata/server/httpd-*           delete ok!"
rm -rf /alidata/server/httpd-*
echo ""
echo "/alidata/log/php                  delete ok!"
rm -rf /alidata/log/php
echo "/alidata/log/mysql                delete ok!"
rm -rf /alidata/log/mysql
echo "/alidata/log/nginx                delete ok!"
rm -rf /alidata/log/nginx
echo "/alidata/log/httpd                delete ok!"
rm -rf /alidata/log/httpd
echo ""
echo "/alidata/www/phpwind              delete ok!"
rm -rf /alidata/www/phpwind
echo ""
echo "--------> Delete file"
echo "/etc/my.cnf                delete ok!"
rm -f /etc/my.cnf
echo "/etc/init.d/mysqld         delete ok!"
rm -f /etc/init.d/mysqld
echo "/etc/init.d/nginx          delete ok!"
rm -f /etc/init.d/nginx
echo "/etc/init.d/php-fpm        delete ok!"
rm -r /etc/init.d/php-fpm
echo "/etc/init.d/httpd          delete ok!"
rm -f /etc/init.d/httpd
echo "/etc/init.d/tomcat7          delete ok!"
rm -f /etc/init.d/tomcat7
echo ""
ifrpm=$(cat /proc/version | grep -E "redhat|centos")
ifdpkg=$(cat /proc/version | grep -Ei "ubuntu|debian")
ifcentos=$(cat /proc/version | grep centos)
echo "--------> Clean up files"
echo "/etc/rc.local                   clean ok!"
if [ "$ifrpm" != "" ];then
 if [ -L /etc/rc.local ];then
   echo ""
 else
   \cp /etc/rc.local /etc/rc.local.bak
   rm -rf /etc/rc.local
   ln -s /etc/rc.d/rc.local /etc/rc.local
 fi
 sed -i "/\/etc\/init\.d\/mysqld.*/d" /etc/rc.d/rc.local
 sed -i "/\/etc\/init\.d\/nginx.*/d" /etc/rc.d/rc.local
 sed -i "/\/etc\/init\.d\/php-fpm.*/d" /etc/rc.d/rc.local
 sed -i "/\/etc\/init\.d\/vsftpd.*/d" /etc/rc.d/rc.local
 sed -i "/\/etc\/init\.d\/httpd.*/d" /etc/rc.d/rc.local
 sed -i "/\/etc\/init\.d\/tomcat7.*/d" /etc/rc.d/rc.local
 sed -i "/JAVA_HOME=\/alidata\/server\/java/d" /etc/rc.d/rc.local
else
 sed -i "/\/etc\/init\.d\/mysqld.*/d" /etc/rc.local
 sed -i "/\/etc\/init\.d\/nginx.*/d" /etc/rc.local
 sed -i "/\/etc\/init\.d\/php-fpm.*/d" /etc/rc.local
 sed -i "/\/etc\/init\.d\/vsftpd.*/d" /etc/rc.local
 sed -i "/\/etc\/init\.d\/httpd.*/d" /etc/rc.local
 sed -i "/\/etc\/init\.d\/tomcat7.*/d" /etc/rc.local
 sed -i "/JAVA_HOME=\/alidata\/server\/java/d" /etc/rc.local
fi
echo ""
echo "/etc/profile                    clean ok!"
sed -i "/export PATH=\$PATH\:\/alidata\/server\/mysql\/bin.*/d" /etc/profile
sed -i "/export CLASSPATH=\.\:\$JAVA_HOME\/lib\/dt\.\jar.*/d" /etc/profile
sed -i "/JAVA_HOME=\/alidata\/server\/java/d" /etc/profile
sed -i "/JRE_HOME=\/alidata\/server\/java\/jre/d" /etc/profile
source /etc/profile
echo ""
if [ "$ifrpm" != "" ];then
 yum -y remove vsftpd  &> /dev/null
 cp -f ./ftp/config-ftp/rpm_ftp/* /etc/vsftpd/
 rm -f /etc/vsftpd/chroot_list
 rm -f /etc/vsftpd/ftpusers
 rm -f /etc/vsftpd/user_list
 rm -f /etc/vsftpd/vsftpd.conf
else
 apt-get -y remove vsftpd
 rm -f /etc/vsftpd.conf
 rm -f /etc/vsftpd.chroot_list
 rm -f /etc/vsftpd.user_list
 rm -rf /etc/pam.d/vsftpd
fi
echo "vsftpd                    remove ok!"


看完了吗?看到这边的人,说明你对这个Shell脚本很有兴趣,我上面讲的都是一些语法皮毛,我特意给大家准备了本关于Shell脚本学习指南电子书和一些学习视频,有助于你更进一步的深入学习,大家可以扫描下面的二维码,在公众号后台聊天窗口回复:Shell脚本,获得这本电子书!

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
27天前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
|
2月前
|
Linux
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
|
7天前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
25 2
|
27天前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。
|
2月前
|
安全 Linux 开发工具
探索Linux操作系统:从命令行到脚本编程
【8月更文挑战第31天】在这篇文章中,我们将一起潜入Linux操作系统的海洋,从最基础的命令行操作开始,逐步深入到编写实用的脚本。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和实用技能。我们将通过实际代码示例,展示如何在日常工作中利用Linux的强大功能来简化任务和提高效率。准备好了吗?让我们一起开启这段旅程,探索Linux的奥秘吧!
|
2月前
|
监控 数据挖掘 Linux
Linux服务器PBS任务队列作业提交脚本的使用方法
【8月更文挑战第21天】在Linux服务器环境中,PBS任务队列能高效管理及调度计算任务。首先需理解基本概念:作业是在服务器上执行的任务;队列则是等待执行任务的列表,具有不同的资源限制与优先级;节点指分配给作业的计算资源。
|
2月前
|
存储 Linux Shell
在Linux中,如何使用脚本,实现判断 192.168.1.0/24 网络里,当前在线的 IP 有哪些?能ping 通则 认为在线。
在Linux中,如何使用脚本,实现判断 192.168.1.0/24 网络里,当前在线的 IP 有哪些?能ping 通则 认为在线。
|
2月前
|
Java 程序员 Linux
学校不教,工作需要!!!程序员需要掌握的常见Linux命令,掌握可以让工作效率翻倍!!
这篇文章列出了程序员在Linux环境下提高工作效率所需要掌握的常见命令,包括文件操作、系统监控、网络配置、进程管理等,并提供了一些实用技巧和快捷键。
|
2月前
|
Java Shell Linux
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
关于如何使用Shell脚本来解析Linux系统中的应用服务日志,提供了脚本实现的详细步骤和技巧,以及一些Shell编程的技能扩展。
28 0
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
|
2月前
|
安全 Linux Shell
在Linux中,如何使用脚本进行系统配置和部署?
在Linux中,如何使用脚本进行系统配置和部署?