范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

linuxshell脚本入门到实战详解

  —、 shell入门简介1.1什么是shellshell脚本简介  # 为啥介绍shell   上次出了一篇linux 命令详解,得到了很多小伙伴的认可,有部分粉丝私信我,让我出一份shell 编程。进过一段时间准备,花了2周时间,整理了一篇shell 入门到实战的博文,欢迎大家阅读,指点。  # 什么是shell  网上有很多shell 的概念介绍,其实都很官方化,如果你对linux 命令很熟悉,那么编写shell 就不是一个难事,shell 本质上是 linux 命令,一条一条命令组合在一起,实现某一个目的,就变成了shell脚本。它从一定程度上 减轻了工作量,提高了工作效率。  # 官方化的shell 介绍 Shell 通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出,简单来说Shell就是一个用户跟操作系统之间的一个命令解释器。  # 常见的shell 有哪些     Bourne Shell(/usr/bin/sh或/bin/sh)     Bourne Again Shell(/bin/bash)     C Shell(/usr/bin/csh)     K Shell(/usr/bin/ksh)     Shell for Root(/sbin/sh) # 最常用的shell是Bash,也就是Bourne Again Shell。Bash由于易用和免费,在日常工作中被广泛使用,也是大多数Linux操作系统默认的Shell环境。
  1.2 shell编程注意事项shell编程有哪些注意事项
  shell命名: Shell脚本名称命名一般为英文、大写、小写,后缀以.sh 结尾
  不能使用特殊符号、空格
  见闻之意,名称要写的一眼可以看出功能. shell编程首行需要#I/bin/bash开头
  shell脚本变量不能以数字、特殊符号开头,可以使用下划线—,但不能用破折号-
  创建一个伟大编程项目—Hello World  1.3第一个shell脚本 hello world创建一个伟大编程项目—Hello World  # 创建一个Helloword.sh 文件 [root@aly_server01~]# touch Helloword.sh  # 编辑Helloword.sh 文件 [root@aly_server01~]# vim Helloword.sh [root@aly_server01~]# cat Helloword.sh  #!/bin/bash # This is ower first shell # by author rivers 2021.09 echo "hello world" [root@aly_server01~]#  [root@aly_server01~]# ll Helloword.sh  -rw-r--r-- 1 root root 85 Sep 20 22:26 Helloword.sh  # 赋予执行权限 [root@aly_server01~]# chmod o+x Helloword.sh   # 运行helloword.sh 脚本 [root@aly_server01~]# ./Helloword.sh  hello world [root@aly_server01~]#
  二、shell环境变量讲解2.1 shell变量详解环境变量介绍  # 什么是变量 很多人可能会说,可以变化的量就是变量。但是发现很多汉语意思很强大,你看的懂的字,却不一定可以理解它的意思。这里你可以理解为 a = 1,同时还可以 a =2、a = 3 ,不同的值都可以复制给同一个 变量 a 。  # 常见的3种变量 Shell编程中变量分为三种,分别是系统变量、环境变量和用户变量,Shell变量名在定义时,首个字符必须为字母(a-z,A-Z),不能以数字开头,中间不能有空格,可以使用下划线(_),不能使用(-),也不能使用标点符号等。  # 简单的变量介绍 [root@keeplived_server~]# a=18 [root@keeplived_server~]# echo $a 18 2.2 shell系统变量介绍系统变量  # Shell常见的变量之一系统变量,主要是用于对参数判断和命令返回值判断时使用,系统变量详解如下:  $0      当前脚本的名称; $n      当前脚本的第n个参数,n=1,2,…9; $*      当前脚本的所有参数(不包括程序本身); $#      当前脚本的参数个数(不包括程序本身); $?      令或程序执行完后的状态,返回0表示执行成功; $      程序本身的PID号。 2.3 shell环境变量介绍2.3.1常见的系统环境变量环境变量介绍  #Shell常见的变量之二环境变量,主要是在程序运行时需要设置,环境变量详解如下:  PATH        命令所示路径,以冒号为分割; HOME        打印用户家目录; SHELL       显示当前Shell类型; USER        打印当前用户名; ID          打印当前用户id信息; PWD         显示当前所在路径; TERM        打印当前终端类型; HOSTNAME    显示当前主机名; PS1         定义主机命令提示符的; HISTSIZE    历史命令大小,可通过 HISTTIMEFORMAT 变量设置命令执行时间; RANDOM      随机生成一个 0 至 32767 的整数; HOSTNAME    主机名2.4 shell 用户环境变量介绍2.4.1自定义shell环境变量用户自定义变量  # 常见的变量之三用户变量,用户变量又称为局部变量,主要用在Shell脚本内部或者临时局部使用,系统变量详解如下: a=rivers                       自定义变量A; Httpd_sort=httpd-2.4.6-97.tar  自定义变量N_SOFT; BACK_DIR=/data/backup/         自定义变量BACK_DIR; IPaddress=10.0.0.1             自定义变量IP1; 2.4.2 echo打印菜单栏使用echo打印菜单栏,显示http-2.4安装过程  # echo 打印httpd-2.4安装步骤 [root@web-server01~]# touch httpd_2.4_install.sh  # 赋予执行权限 [root@web-server01~]# chmod o+x httpd_2.4_install.sh [root@web-server01~]# ./httpd_2.4_install.sh
  2.4.3 shell中彩色输出helloworldecho -e扩展  #!/bin/bash # This is echo color shell # by author rivers 2021.09-23 # 字体颜色 for i in {31..37}; do echo -e "33[$i;40mHello world!33[0m" done # 背景颜色 for i in {41..47}; do echo -e "33[47;${i}mHello world!33[0m" done # 显示方式 for i in {1..8}; do echo -e "33[$i;31;40mHello world!33[0m" done
  三、shell编程流程控制语句3.1 if 条件语句介绍3.1.1常用的单/双分支if 条件语句  # If条件判断语句,通常以if开头,fi结尾。也可加入else或者elif进行多条件的判断  # 单分支语句 ---比较大小     if (条件表达式);then         语句1     fi  # 双分支if 语句     if (表达式)         语句1     else         语句2     fi  # 多支条件语句 ---判断成绩     if (表达式)         语句1     elif         语句2     elif         语句2     fi    3.1.2 if常见判断逻辑运算符详解if常见判断逻辑运算符  -f      判断文件是否存在 eg: if [ -f filename ]; -d      判断目录是否存在 eg: if [ -d dir     ]; -eq     等于,应用于整型比较 equal; -ne     不等于,应用于整型比较 not equal; -lt     小于,应用于整型比较 letter; -gt     大于,应用于整型比较 greater; -le     小于或等于,应用于整型比较; -ge     大于或等于,应用于整型比较; -a      双方都成立(and) 逻辑表达式 –a 逻辑表达式; -o      单方成立(or) 逻辑表达式 –o 逻辑表达式; -z      空字符串; -x      是否具有可执行权限 ||      单方成立; &&      双方都成立表达式。3.1.3使用单分支语句判断crond进程是否在运行---案例判断crond服务是否运行  #!/bin/bash # this is check crond # by author rivers on 2021-9.23  # 定义一个变量名 name=crond num=$(ps -ef|grep $name|grep -vc grep) if [ $num -eq 1 ];then     echo "$num running!" else     echo "$num is not running!" fi3.1.4判断系统目录是否存在---案例判断系统目录是否存在  #!/bin/bash # this is check directory  # by author rivers on 2021-9.27   if  [  !  -d  /data/rivers  -a  !  -d  /tmp/rivers  ];then  mkdir  -p  /data/rivers  f  i3.1.5多个条件判断学生分数等级---案例判断学生成绩等级  # if 语句可以直接对命令状态进行判断,就省去了获取$?这一步!   # 如果第一个条件符合就不再向下匹配 #!/bin/bash   # this check grade shell   # by author rivers on 2021-09-27      grade=$1   if [ $grade -gt 90 ];then     echo "Is"s very good!"   elif [ $grade -gt 70 ];then     echo "Is"s is good!"      elif [ $grade -ge 60 ];then     echo "pass"      else     echo "no pass"   fi
  3.2 for循环语句介绍for循环语句  #格式:for name [ [ in [ word ... ] ] ; ] do list ; done   for 变量名 in 取值列表; do     语句 1   done 3.2.1检查同—局域网多台主机是否存活检查多台主机存活情况  #!/bin/bash # check hosts is on/Off # by rivers on 20219-23  Network=$1 for Host in $(seq 1 254) do ping -c 1 $Network.$Host > /dev/null && result=0 || result=1  if [ "$result" == 0 ];then   echo -e "33[32;1m$Network.$Host is up 33[0m"   echo "$Network.$Host" >> /tmp/up.txt  else   echo -e "33[;31m$Network.$Host is down 33[0m"   echo "$Network.$Host" >> /tmp/down.txt fi done
  3.3 while循环语句介绍while循环语句  # While循环语句与for循环功能类似,主要用于对某个数据域进行循环读取、对文件进行遍历,通常用于需要循环某个文件或者列表,满足循环条件会一直循环,不满足则退出循环,其语法格式以while…do开头,done结尾与  #while 关联的还有一个 until 语句,它与 while 不同之处在于,是当条件表达式为 false 时才循环,实际使用中比较少,这里不再讲解。  while  (表达式) do   语句1 done break和continue语句  # break 和 continue 语句   break 是终止循环。   continue 是跳出当前循环。 #示例 1:在死循环中,满足条件终止循环 while true; do   let N++   if [ $N -eq 5 ]; then     break fi   echo $N done 输出: 1 2 3 4  #示例 2:举例子说明 continue 用法 N=0 while [ $N -lt 5 ]; do   let N++ if [ $N -eq 3 ]; then   continue fi   echo $N done  输出: 1 2 4  # 打印 1-100 数字 i=0 while ((i<=100)) do         echo  $i         i=`expr $i + 1` done
  3.3.1 While循环求1-100的总和---案例求1-100的总和  #!/bin/bash # by author rivers on 2021-9-27 j=0 i=1 while ((i<=100)) do      j=`expr $i + $j`      ((i++)) done echo $j
  3.3.2每10秒循环判断—次hbs用户是否登录系统---案例每10秒循环判断系统登录  [root@web-server01~/script]# vim login.sh  #!/bin/bash #Check File to change.  #By author rivers 2021-9-27 USERS="hbs" while true do         echo "The Time is `date +%F-%T`"         sleep 10         NUM=`who|grep "$USERS"|wc -l`         if [[ $NUM -ge 1 ]];then                 echo "The $USERS is login in system."         fi done
  3.4 case选择语句介绍case选择语句  #Case选择语句,主要用于对多个选择条件进行匹配输出,与if elif语句结构类似,通常用于脚本传递输入参数,打印出输出结果及内容,其语法格式以Case…in开头,esac结尾。语法格式如下: case 模式名  in   模式 1)     命令     ;;   模式 2)     命令     ;; *) 不符合以上模式执行的命令 esac # 每个模式必须以右括号结束,命令结尾以双分号结束。3.4.1使用case编写—个httpd服务启动脚本编写httpd服务启动脚本  [root@web-server01~/script]# vim httpd_start.sh  # check http server start|stop|starus # by author rivers on 2021-9-27 while true do     echo -e "     33[31m start 33[0m     33[32m stop 33[0m      33[33m status 33[0m     33[34m quit 33[0m  " read -p "请输入你的选择start|stop|quit:" char case $char in start)     systemctl start httpd && echo "httpd服务已经开启" || echo "开启失败" ;; stop)     systemctl stop httpd && echo "httpd服务已经关闭" || echo "关闭失败" ;; restart)     systemctl restart httpd && echo "httpd服务已经重启" || echo "重启失败 " ;; status)     systemctl status httpd && echo -e "         httpd 的服务状态    ;; quit)
  3.5 select选择语句介绍select选择语句  #select 是一个类似于 for 循环的语句 #Select语句一般用于选择,常用于选择菜单的创建,可以配合PS3来做打印菜单的输出信息,其语法格式以select…in do开头,done结尾:  select i in (表达式)  do 语句 done  # 选择mysql 版本 #!/bin/bash # by author rivers on 2021-9-27 PS3="Select a number: " while true; do select mysql_version in 5.1 5.6 quit;  do   case $mysql_version in   5.1)     echo "mysql 5.1"       break       ;;   5.6)     echo "mysql 5.6"        break        ;;   quit)     exit     ;;   *)     echo "Input error, Please enter again!"       break esac  done done
  3.5.1使用select打印lnmp菜单栏---案例打印lnmp菜单栏  #!/bin/bash #by author rivers on 2021-9-27 PS3="Please enter you select install menu:" select i in http php mysql quit do case $i in         http)         echo -e "                 33[31m Test Httpd 33[0m"          ;;         php)         echo  -e "33[32m Test PHP33[0m"         ;;         mysql)         echo -e "33[33m Test MySQL.33[0m"         ;;         quit)         echo -e "33[32m The System exit.33[0m"         exit esac done
  3.6 shell函数、数组编程实战函数  # Shell允许将一组命令集或语句形成一个可用块,这些块称为Shell函数,Shell函数的用于在于只需定义一次,后期随时使用即可,无需在Shell脚本中添加重复的语句块,其语法格式以function name(){开头,以}结尾。  # Shell编程函数默认不能将参数传入()内部,Shell函数参数传递在调用函数名称传递,例如name args1 args2。  # 函数语法 func() { command1 command1 …… } fun  # 直接调用函数名 # Shell 函数很简单,函数名后跟双括号,再跟双大括号。通过函数名直接调用,不加小括号。 #!/bin/bash func() { VAR=$((1+1)) return $VAR echo "This is a function." } func echo $? # bash test.sh  2数组  # 数组是相同类型的元素按一定顺序排列的集合。 格式:array=(元素 1 元素 2 元素 3 ...) 用小括号初始化数组,元素之间用空格分隔。  定义方法 1:初始化数组 array=(a b c)  定义方法 2:新建数组并添加元素 array[下标]=元素  定义方法 3:将命令输出作为数组元素array=($(command))
  3.6.1定义一个httpd安装的函数---案例创建apache软件安装函数  [root@web-server01~/script]# vim xx.sh  #!/bin/bash #auto install apache #By author rivers 2021-09-27  #Httpd define path variable FILES=httpd-2.2.31.tar.bz2 LES_DIR=httpd-2.2.31 URL=http://mirrors.cnnic.cn/apache/httpd/ PREFIX=/usr/local/apache2/ function Apache_install () { #Install httpd web server  if [[ "$1" -eq "1" ]];then         wget -c $URL/$FILES &&  tar -jxvf $FILES && cd $FILES_DIR &&./configure         if [ $? -eq 0 ];then                 make && make install                 echo -e " 33[32m--------------------------------------------                 echo -e "33[32mThe $FILES_DIR Server Install Success !33[0m         else                 echo -e "33[32mThe $FILES_DIR Make or Make install ERROR,Plea                 exit 0         fi fi } Apache_install 1 # 调用函数,传参为1 3.6.2遍历数组元素---案例遍历数组元素  #方法 1: #!/bin/bash IP=(10.0.0.1 10.0.0.2 10.0.0.3) for ((i=0;i<${#IP[*]};i++)); do echo ${IP[$i]} done # bash test.sh 10.0.0.1 10.0.0.2 10.0.0.3  #方法 2: #!/bin/bash IP=(10.0.0.1 10.0.0.2 10.0.0.3) for   IP   in ${IP[*]}; do echo $IP done四、shell编程实战案例4.1 shell脚本实战之系统备份脚本---案例Tar工具全备、增量备份网站,Shell脚本实现自动打包备份  #!/bin/bash #Auto Backup Linux System Files #by author rivers on 2021-09-28  SOURCE_DIR=(     $* ) TARGET_DIR=/data/backup/ YEAR=`date +%Y` MONTH=`date +%m` DAY=`date +%d` WEEK=`date +%u` A_NAME=`date +%H%M` FILES=system_backup.tgz CODE=$? if     [ -z "$*" ];then     echo -e "33[32mUsage: Please Enter Your Backup Files or Directories --------------------------------------------  Usage: { $0 /boot /etc}33[0m"     exit fi #Determine Whether the Target Directory Exists if     [ ! -d $TARGET_DIR/$YEAR/$MONTH/$DAY ];then     mkdir -p $TARGET_DIR/$YEAR/$MONTH/$DAY     echo -e "33[32mThe $TARGET_DIR Created Successfully !33[0m" fi #EXEC Full_Backup Function Command Full_Backup() { if     [ "$WEEK" -eq "7" ];then     rm -rf $TARGET_DIR/snapshot     cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES ${SOURCE_DIR[@]}     [ "$CODE" == "0" ]&&echo -e  "-------------------------------------------- 33[32mThese Full_Backup System Files Backup Successfully !33[0m" fi } #Perform incremental BACKUP Function Command Add_Backup() {    if         [ $WEEK -ne "7" ];then         cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $A_NAME$FILES ${SOURCE_DIR[@]}         [ "$CODE" == "0" ]&&echo -e  "----------------------------------------- 33[32mThese Add_Backup System Files $TARGET_DIR/$YEAR/$MONTH/$DAY/${YEAR}_$A_NAME$FILES Backup Successfully !33[0m"    fi } sleep 3  Full_Backup;Add_Backup 4.2 shell脚本实战之收集系统信息、---案例shell脚本实现服务器信息自动收集  cat <
火爆全网的ChatGPT是个什么?国内注册使用ChatGPT方法!科技互联网圈子有一个非常火爆的话题ChatGPT,短短一周的时间就有上百万的用户,如果你不是程序员,也许会问这到底是个什么玩意?ChatGPT是来自OpenAI实验室开发的一款人工湖南国韵教育科技有限公司是一家什么样的公司,国韵教育企业简介国韵教育成立于2020年,总部坐落于潇湘大地,是一家师资丰富教育产品类别众多的新型线上教育机构,专为零基础声乐器乐播音主持配音等艺术类学员提供实用教学服务。经过短短两年的发展,目前家庭成员都能驾驭的手机,华为nova10Pro上手体验南瓜图赏华为nova10Pro,抛开性价比先不谈,我觉得作为一款日常使用的手机,其他表现一点问题都没有。1机身方面,还是比较轻薄的,磨砂后壳加上曲屏,边框还镶了一圈银边,整体会觉得快递不快?官方回应截至12月11日,全国关停邮政快递分拨中心已清零,目前仅北京等地400余个网点因涉疫关停,正积极推动解封。感到快递不快,主要是前期一些地区由于疫情防控等原因,积累了大量线上订单未发Web3。0目前可见最大的应用方向是视频游戏Web3。0是当今互联网上最常用的术语之一,在区块链领域的使用率甚至更高,每个初创企业和新项目似乎都在构建面向Web3的东西。虽然Web3可能会成为一个流行语,但它代表着一些有意义512G直接降了960元,国产首款150W高快充旗舰,足够有诚意目前国产手机中,内行人最喜欢买的产品是两千档机型,原因比较简单,这个价位在经济上能承受,而在配置上如果选择得好,买到旗舰水准的手机并不难。什么样的配置才称得上旗舰?简单来说就是有着小米13对比三星GalaxyS22差距明显,谁是机皇一目了然!今年安卓阵营流行直屏旗舰,许多厂商都推出同类型的产品,热度最高的三星GalaxyS22被称之为业界标杆给同行参考及作品等。直到小米13系列发布,情况再次发生重大改变,两款重量级产品截至目前,盘点2022年屏幕采用1。5K分辨率的手机1iPhone14搭载满血版A15仿生处理器,采用台积电5nm工艺制程,拥有卓越的性能以及超低功耗,无论游戏还是日常,都游刃有余正面是一块6。1英寸的AMOLED柔性直屏,支持1。华为畅享50z发布5000毫安超大电池5000w像素,售价1099起2022年12月9日,华为召开了华为冬季全场景新品发布会,在这个发布会上,华为发布了多款新品,其中涵盖了手机,手表,耳机,眼镜等多种类型的产品,不过在这个发布会上面的手机产品除了热抖音达人探店黄山景区,看探店达人如何用镜头捕捉山海日落已经到了人生最低谷了,低不下去了。以后每走一步,都是往上走。疫情之下,旅游行业最先低迷,抱着这样的信念,作为黄山导游的查立国开始在自己熟悉的领域另辟蹊径,也因此与抖音达人探店结缘。小米13性能打败iPhone14系列?卢伟冰回应脱胎换骨的一代!小米13系列热度非常高,不仅预售实现全平台告罄,今天也即将迎来正式首销,许多米粉都在关心真实表现究竟如何?有博主经过实际测试后发现综合性能提升非常大,小米集团副总裁卢伟冰评论小米1
牛!美记湖人与爵士的交易即将完成,488悍将要来洛杉矶打球不知不觉中,2022年已经进入九月份,这也意味着NBA训练营即将开启对于洛杉矶湖人来说,他们上个赛季的经历无疑是苦涩的在总经理佩林卡的主持之下,他们重金引进了威斯布鲁克,又一口气引假如我是一个外星人!观察了地球几百万年假如我是X星球的外星人。假如我在X星球观察了地球几百万年。地球是宇宙中非常漂亮的一颗行星。有高耸的雪山,有宽阔的草原,有茂密的森林,有蔚蓝的海洋,有一条很长的墙他们叫长城,还有一颗天上一天地上一年是真的吗?宇航员在月球待一天,地球过了多久?在中国古代就流传着很多神话故事,大家最为熟悉的就是神仙,在很多神话故事中,我们能够知道,神仙居住在天上,正所谓天上一天,地上一年,在古代神话故事中,神仙的一天就相当于人间一年的时间埃及人如何建造的金字塔?干涸的尼罗河支流提供了新线索埃及金字塔是地球上最大的人造建筑群,距今有5000多年的历史。作为古埃及文明最具影响力的象征,直到今天,我们仍然无法确定这些宏伟且结构精巧的法老陵墓是如何建造的。地理学家试图从环境地物光谱仪的性能体现在哪些方面?莱森光学地物光谱仪是电磁辐射与地物相互作用的结果。不同的物质反射透射吸收散射和发射电磁波的能量是不同的。地物光谱仪具有其独特的变化规律,表现为地物光谱随波长而变化的特征。这些特征称为地物光揭秘中国神舟的垂直飞天港,星辰大海从这里启航2022年6月5日10时44分长征二号F火箭在酒泉卫星发射中心腾空它将神舟十四号载人飞船和3名中国航天员送入太空启航前长二F火箭还有一段超短途旅行经过1。5公里长的轨道从技术区到达联想小新Pad2022全面推送ZUI13。5。476OTA2IT之家8月29日消息,联想小新Pad2022今日全面推送ZUI13。5。476OTA2更新,主要修复了微软Office闪退问题,以及无法从笔记本电脑投屏的问题。升级看点优化系统稳AppleWatch8再一次没有创新,还买吗?编者按提起可穿戴设备尤其是手表手环这样的产品,AppleWatch就像iPhone一样,属于行业的开创奠基者,同时也是标杆性产品。AppleWatch秉承着苹果强悍硬件和流畅操作的果粉最喜欢上Google问这个!其中一个是忘记iPhone密码每次遇到有问题的时候,只需上Google搜寻就能找到答案,于是有很多果粉也是如此,一旦遇到iPhone有问题就上Google求救。日前,外媒报导了一个无线电信供应商统整果粉在GooFIBBR好物推荐直播健身必入投屏神器刘畊宏男孩女孩好物推荐摆起臂腿抬高,腰间赘肉咔咔掉。最近,刘畊宏的健身直播火了,全网在跳本草纲目毽子操。短视频平台上,网友们更是纷纷打卡,等待刘老师批改作业。单人跳夫妻跳亲子跳,甚大巴黎4。08亿欧元薪资领跑五大联赛,烧钱不力的曼联作价43亿美元出售作者杨弋北京时间2022年9月6日,德国媒体图片报公布了欧洲五大联赛各家俱乐部的球员年薪排行统计。据统计结果,截止夏季转会窗口结束,大巴黎以年薪总额4。08亿欧元占得头名,其中梅西