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

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 <
日本的综艺节目为什么那么变态随着媒体娱乐产业的发展,也为了满足人们越来越丰富的娱乐需求,各类真人秀应运而生,说到综艺节目,韩国和日本是极具代表性的两个国家,可以说是花样丰富并且层出不穷,可能与本国的文化和社会TVB隐形战队视觉盛宴,你看到谁挪不动步了?正在TVB翡翠台和埋堆堆APP热播中的隐形战队,目前正在各大社交平台被热烈讨论。大家除了对紧凑的剧情发展表示好评外,还对演员们阳光健美的身材津津乐道。隐形战队讲述了反恐特勤队(CT我国科学家取得催化剂技术新突破,曾长期受制于国外3月28日,国际期刊自然纳米技术发表了我国科学家取得的催化剂技术新突破。天津大学巩金龙教授带领新能源化工团队经过长期攻关,在烷烃脱氢合金催化剂的设计方法上取得创新突破。这也是我国在儿童牙齿矫治并非越早越好视觉中国供图在颜值焦虑日益严重的今天,儿童牙齿早期矫治也越来越受到家长的关注。然而,并非所有孩子都需要早期矫治的干预。一般来讲,宝宝在6个月到1岁左右长出第一颗乳牙,到2岁半左右所传统文化中的糟粕你相信与现代科学格格不入的中医么?很多普通老百姓出于朴素的爱国情怀,总是认为中医是中华民族的传统文化,应该相信它,而不管它有没有经过科学验证,甚至不管它是不是经得起简单推敲。遗憾的是爱国情怀不能治疗疾病。鲁迅是强烈6只企鹅宝宝百天庆生,首次与游客见面!邀您给起名北京日报客户端记者武亦彬3月26日,在北京太平洋海底世界博览馆,6只今年诞生的洪氏环企鹅宝宝首次与游客见面。今年初,6只自然孵化的洪氏环企鹅破壳诞生,历经90多天的育幼期,它们褪去退役不褪色纪律记心间各部队依法加强退役人员教育管理的一组见闻2月28日,武警合肥支队执勤四中队举行退役仪式。徐伟摄写在前面近段时间,部队又迎来了退役季,一批老兵带着不舍和眷恋离开绿色军营。条令条例是军人一切行动的行为准则和基本遵循。临近退役原来调皮,是指可以戳人眼睛,扇人耳光,脱人衣服拍照?施暴学生家长孩子调皮该赔就赔我们的孩子到底怎么了?看到那个视频,女孩子被打的无力还手,被他们一巴掌扇倒在地上,被他们撕烂衣服,被他们推倒我看不下去!!小孩子,原来可以凶恶到这个程度季节交替,如何预防上呼吸道感染?听听中医专家怎么说目前,人们恢复了井然有序的生活,小神兽们开始归笼,家长们却喜忧参半,原因是寒地正处于冬春季节交替之际,上呼吸道感染频发。在此,黑龙江中医药大学附属第二医院儿科博士生导师王有鹏教授充禽兽不如!妈妈竟默许纵容女儿被性侵在山东的一个小县城,有位叫萱萱(化名)的女孩,出生在一个普通家庭里。她的父亲秦勇(化名)在附近的一家工厂工作,而她的母亲潘莲(化名)是一位全职的家庭主妇,外表非常美丽,身材出色。然2023年最新食物升糖排行榜,445种常见食物GI大全,快收藏糖友要想控制好血糖,一定要学会正确吃。不同的食物对餐后血糖的影响可能差别很大,一方面是由于它们碳水化合物含量不同(这种营养素有最直接的升糖作用),另一方面是它们在体内的吸收速度不同
欢迎免费领取i大明白癸卯兔年红包封面各位关注者朋友们新年好感谢大家一直以来的关注,使我在今年有机会为大家制作免费的红包封面。图片来自AI智能生成,同时也感谢AI科技的发展。再过几天就是农历小年了,大年三十近在眼前。在HiBy海贝RS8播放器推送V1。10固件更新IT之家1月13日消息,HiBy海贝宣布,HiByRS8迎来固件更新V1。10,修复了AppleMusic异常退出问题,修复其它若干Bug。下面是更新内容修复AppleMusic异汪峰教章子怡弹吉他,老夫老妻像是初恋,两人笑容甜似蜜秋冬季除了大衣羽绒服人们最常见的应该就是卫衣。卫衣的穿搭因为十分简单且随性而深受很多明星包括普通年轻人的喜欢。基础的纯色卫衣在人们日常生活中的出镜率和实用程度极高。卫衣的种类十分的2023年,穿橘色最好看,美极了!嗨,各位小仙女们,大家好呀!2023年,除了流行的衣服款式之外,相信很多姐妹们都会关注流行的颜色吧?如果你已经穿腻了黑白配色的话,那么可以试试今年流行的橘色,说实话,这种颜色真的太第五十六集吴倩骨子里透露出武汉人那般直爽,霸气,不矫揉造作吴倩,1992年9月26日出生于湖北省武汉市,毕业于武汉大学艺术系2010级本科班,中国内地影视女演员。吴倩她是一个非常快乐的明星,扮演的各种角色也很可爱,有韧性,坚持自己的目标,新年红色搭配合集!过年会遇到的场合,看这8套穿搭就够了眼见着到了年根儿,新年要穿的衣服大家都置办妥当了嘛最逃不掉的应该就是红色了吧!正巧最近姐妹们喊着要看红色穿搭的越来越多,今儿咱就来上套,给大家伙儿找找灵感。红色的面积是由小到大的,第71届环球小姐选美大赛上特色的民族服装一年一度的环球小姐民族服装大赛周三在美国路易斯安那州的新奥尔良市举行。选手们穿着抢眼的服装,彰显他们的文化。活动中最令人难忘的造型是引人注目的头饰透明面料和羽毛。阿根廷小姐Barb69岁布丽吉特真该换发型了!新亮相穿大衣踩恨天高,大秀少女身材法国总统马克龙跟妻子布丽吉特相差25岁的师生恋,向来都是网友们津津乐道的话题,虽然因为两个人特殊的身份关系,外界一直都有批评的声音,但是马克龙却毫不在乎,在之前参加活动时,还首次回2022年最受抖友欢迎全球10大海滩出炉泰国芭提雅海滩No。2日前,泰媒引援外媒消息,通过对抖音平台用户进行全球10大最受欢迎海滩调研发现,在抖友最爱的全球10大知名海滩中,泰国芭提雅海滩排名第二,仅次于澳大利亚邦迪海滩。最受抖友欢迎的全球1高端车都玩这些套路?买车等于买彩电网友我车还是收音机!新能源时代的汽车智能体验可谓是一天一个样,继特斯拉宣布要在车机内加入Steam游戏平台之后,比亚迪极星和现代等品牌也在近期宣布与NVIDIA合作,将NVIDIACloud游戏云服务GNSS(二),自动驾驶定位团队的保护伞在GNSS的定位导航授时三大功能中,定位功能无疑是出镜率最高的那为奶油小生。其定位精度大多数情况下直接决定了汽车驾驶自动化系统可以实现的级别而定位可靠性则决定了车辆开到沟里与撞上马