返回顶部
首页 > 资讯 > 操作系统 >入门shell脚本基础及原理
  • 359
分享到

入门shell脚本基础及原理

shell脚本原理shell脚本入门 2022-06-04 23:06:46 359人浏览 泡泡鱼
摘要

目录1.特殊变量2.内部环境变量3.整数以及字符判断3.1整数判断3.2字符测试4.文件判断5.read输入6.if判断7.案例选择判断8.for循环9.while循环10.深入练习1.写一个脚本,输入三个数字进行相应的

目录
  • 1.特殊变量
  • 2.内部环境变量
  • 3.整数以及字符判断
    • 3.1整数判断
    • 3.2字符测试
  • 4.文件判断
    • 5.read输入
      • 6.if判断
        • 7.案例选择判断
          • 8.for循环
            • 9.while循环
              • 10.深入练习
                • 1.写一个脚本,输入三个数字进行相应的加减乘除
                • 2.猜数字游戏
                • 3.写一个脚本,让Nginx服务设置开机自启
                • 4.利用for循环,创建user序号1-100的用户
                • 5.利用while循环,计算1+2…100的值
                • 6.apache简单的一个编译部署脚本

              1.特殊变量

              $#:查看变量参数的个数
              $0:查看脚本的名字
              $!:查看shell后台的pid
              $@:查看传递脚本所有参数的列表
              $*:查看所有参数的列表,单字符串形式显示
              $$:脚本本身进程的ID
              $?:上一条命令的结果,显示0则成功,不是0则失败

              2.内部环境变量

              
              $PATH 
              SHELL           当前使用的shell
              UID 			当前的用户环境 {0|其它数字}={root|其它用户}
              HOME            当前使用的用户目录
              PWD        		当前的目录	
              HISTFILE       	历史命令路径
              PS1					#[\u@\h \W]\$    用户@主机名\目录\$
              

              3.整数以及字符判断

              3.1整数判断

              
              -eq       测试俩个整数是否相等      (equal)
              -ne       测试俩个整数是否不等		(unequal)
              -gt       测试一个数是否大于一个数 (greater than)
              -lt		  测试一个数是否小于一个数 (less than)
              -ge	      测试一个数大于或等于 
              -le       测试一个数小于或等于
              

              3.2字符测试

              
              =~   测试是否被正则表达式匹配
              -z "string" 检测字符是否为空,空则真,不空则假    如: [ -z "" ]为真空则为真
              -n "string" 检测字符是否不空,不空则真,不空则假
              字符相比较大小用[[  ]],比的是第一个字母(a-zA-Z)都是大写或者都是小写比较ascii值 越大则越大
              有大写又有小写则A>a B>b   但是A不大于b的情况
              [root@slave02 ~]# [[ "A" < "B" ]]
              [root@slave02 ~]# echo $?
              0
              [root@slave02 ~]# [[ "a" < "b" ]]
              [root@slave02 ~]# echo $?
              0
              

              4.文件判断

              
              -e:文件是否存在   
              -b:测试是否块设备文件
              -c:测试是否字符设备文件
              -f:测试是否普通文件
              -d:测试是否目录
              -h:测试是否符号链接文件
              -L:测试是否是符号链接文件
              -p:测试是否是命名管道文件
              -S:测试是否是套接字文件
              权限相关:
              -r 读
              -w 写
              -x 执行
              特殊权限
              -g
              -u
              -k
              等
              

              5.read输入

              
              选项:
              -p:指定提示符
              -t:指定提示等待的时间(秒)
              

              6.if判断

              
              多分支:
              if [ 条件 ];then
              	statement1
              ​	.....
              elif  [ 条件2 ];then
              ​	statement2
              ​	....
              else
              ​	statement3
              ​	....
              fi
              

              7.案例选择判断

              
              case $变量名 in            
              	'value1')                
              		 statement                
              		 ...                
               ;;            
              	'value2')                
               		statement                
               		...                
               ;;            
              *)                
               		statement                
               		..                
               ;;        
              esac
              
              #case支持的通配符:
                  *           //任意长度任意字符
                  ?           //任意单个字符
                  []          //指字范围内的任意单个字符
                 start|START  //俩种选择
              

              8.for循环

              
              第一种:
              for  ((expr1;expr2;expr3))      # expr1:初始值条件  
              								#expr2:循环的范围进行退出  
              								#expr3:变量的值使用
              {
              ​	循环体
              }
              for ((expr1;expr2;expr3));do            
              ​	循环体
              done
              第二种:
              for  变量  in 列表; do
              ​	循环体
              done
              

              9.while循环

              
              while循环用于不知道循环次数的场景,注意有退出条件
              while [ 条件 ];do
              	statement
              	.....
              done
              

              10.深入练习

              1.写一个脚本,输入三个数字进行相应的加减乘除

              
              [root@slave02 ~]# cat script01.sh 
              #!/bin/bash
              a=$1
              b=$2
              c=$3
              num1=$[$a+$b+$c]
              num2=$[$a-$b-$c]
              num3=$[$a*$b*$c]
              echo "$a + $b + $c" = $num1
              echo "$a - $b - $c" = $num2
              echo "$a * $b * $c" = $num3
              awk "BEGIN{printf \"$a/$b/$c=%.2f\n\",$a/$b/$c}"
              [root@slave02 ~]# source script01.sh 100 10 9
              100 + 10 + 9 = 119
              100 - 10 - 9 = 81
              100 * 10 * 9 = 9000
              100/10/9=1.11
              

              2.猜数字游戏

              规则:指定一个数字,只要猜到了这个数字则过关,否则显示数字大了或者数字小了

              
              [root@master ~]# cat test03.sh 
              #!/bin/bash
              nums=99
              read -p "please enter a number: " num
              if [ $num -gt $nums ];then
                      echo "数字大了"
              elif [ $num -lt $nums ];then
                      echo "数字小了"
              else
                      echo "猜对"
              fi        
              [root@master ~]# . test03.sh 
              please enter a number: 10
              数字小了
              [root@master ~]# . test03.sh
              please enter a number: 100
              数字大了
              [root@master ~]# . test03.sh
              please enter a number: 99
              猜对
              

              3.写一个脚本,让nginx服务设置开机自启

              
              #$0是nginx本身 $1是变量对应着下面的start|stop|restart|status
              [root@192 init.d]# pwd
              /etc/init.d
              [root@192 init.d]# cat nginx 
              #!/bin/bash
              case $1 in
                      'start')
                        /usr/local/nginx/sbin/nginx
                        ;;
                      'stop')
                        /usr/local/nginx/sbin/nginx -s stop
                        ;;
                      'restart')
                      /usr/local/nginx/sbin/nginx -s stop
                      /usr/local/nginx/sbin/nginx
                        ;;
                      'status')
                        num=$(ps -ef |grep -v 'grep'|grep -c nginx:)
                        if [ $num -eq 0 ];then
                               echo "nginx is stoped" 
                        else
                               echo "nginx is running"
                        fi
                        ;;
                      *)
                            echo "Usage: service $0 start|stop|restart|status"
                        ;;          
              esac
              		#当判断有nginx进程数量则认为开启服务,否则认为服务开启失败
              

              4.利用for循环,创建user序号1-100的用户

              
              #创建用户user1-100
              [root@master ~]# cat test05.sh 
              #!/bin/bash
              for (( i=1;i<=100;i++));do
                      useradd user$i
                      id user$i &>/dev/null
                      if [ $? -eq 0 ];then  #只要判断用户成功,$?才会显示0,显示0则代表执行下一条命令,否则显示user以及存在
                              echo "success"
                      else	
                      		echo "user is exis"    
                      fi
              done
              

              5.利用while循环,计算1+2…100的值

              
              [root@slave02 ~]# cat which.sh 
              #!/bin/bash
              s=0                 #初始值0
              i=1					#判断的数值,最终到100停止
              while [ $i -le 100 ];do
              s=$[$s+$i]			 
              i=$[$i+1]            #自增加数
              done
              echo $s
              [root@slave02 ~]# source which.sh 
              5050
              						#随便输入一个数字进行计算的话,把100改为$1即可
              

              6.apache简单的一个编译部署脚本

              
              1.一般项目或者脚本,文件,放在相应的位置里,方便查找
              [root@slave02 tmp]# pwd
              /tmp
              [root@slave02 tmp]# ls
              apache
              [root@slave02 apache]# ls
              install_apache.sh  soft
              [root@slave02 soft]# ls
              apr-1.7.0.tar.bz2   apr-util-1.6.1.tar.bz2    Httpd-2.4.48.tar.bz2  httpd.service
              [root@slave02 apache]# cat install_apache.sh #!/bin/bash echo "欢迎使用此脚本" apachedir=/usr/local/apache if [ $UID -ne 0 ];then
                      echo "伙计,请使用管理员身份运行"
              fi
              echo "正在安装依赖包..."
              yum -y install epel-release  bzip2 "@Development Tools"  &>/dev/null
              yum -y install openssl-devel pcre-devel expat-devel libtool GCc gcc-c++ make  &>/dev/null
              id apache &>/dev/null
              if [ $? -ne 0 ];then
                      useradd -r -M -s /sbin/nologin apache
              fi
              cd /tmp/apache/soft/
              tar -xf apr-1.7.0.tar.bz2
              tar -xf apr-util-1.6.1.tar.bz2
              tar -xf  httpd-2.4.48.tar.bz2
              sed -i '/ $RM "$cfgfile"/d' apr-1.7.0/configure
              echo "正在编译安装apr,请听听歌放松放松......." 
              cd apr-1.7.0/
              [ ! -d /usr/local/apr ]
              if [ $? -eq 0 ];then
                      ./configure --prefix=/usr/local/apr && make && make install &>/dev/null
              else
                      echo "apr已经安装"
              fi
              cd ../apr-util-1.6.1/
              [ ! -d /usr/local/apr-util ]
              if [ $? -eq 0 ];then
                      ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install &/dev/null
              else
                      echo "apr-util已经安装"
              fi
              cd ../httpd-2.4.48/
              [ ! -d /usr/local/apache/ ]
              if [ $? -eq 0 ];then
              ./configure --prefix=$apachedir \
                      --sysconfdir=/etc/httpd24 \
                      --enable-so \
                      --enable-ssl \
                      --enable-cgi \
                      --enable-rewrite \
                      --with-zlib \
                      --with-pcre \
                      --with-apr=/usr/local/apr \
                      --with-apr-util=/usr/local/apr-util/ \
                      --enable-modules=most \
                      --enable-mpms-shared=all \
                      --with-mpm=prefork
                      make && make install &>/dev/null
              else
                      echo "httpd已经安装"
              fi
              cd
              #有影响的加判断,没影响的忽略
              echo "export PATH=$apachedir/bin:\$PATH"   > /etc/profile.d/httpd.sh
              ln -s $apachedir/include/ /usr/include/apache &>/dev/null
              grep 'apache/man' /etc/man_db.conf   &>/dev/null
              
              if [ $? -eq 1 ];then
                      sed -i "20aMANDATORY_MANPATH   $apachedir/man" /etc/man_db.conf
              else
                      echo "apache is help exists"
              fi
              
              [ ! -f /usr/lib/systemd/system/httpd.service ]
              if  [ $? -eq 0 ];then
                      cp /clq/apache/soft/httpd.service /usr/lib/systemd/system/
              else
                      echo "已经存在文件跳过"
              fi
              systemctl daemon-reload
              systemctl enable --now httpd
              num02=$(ps -ef |grep -v 'grep'|grep -c httpd)
              if [ $num02 -eq 0 ];then
                      echo "httpd自启失败"
              else
                      echo "httpd自启成功"
              fi
              echo "欢迎下次使用"                                 
              [root@slave02 apache]# chmod +x install_apache.sh 
              [root@slave02 apache]# source install_apache.sh 
              [root@slave02 apache]# source install_apache.sh 
              欢迎使用此脚本
              正在安装依赖包...
              正在编译安装apr,请听听歌放松放松.......
              apr以及安装
              apr-util以及安装
              httpd已经安装
              apache is help exists
              已经存在文件跳过
              httpd自启成功
              欢迎下次使用
              [root@slave02 ~]# systemctl status httpd.service 
              ● httpd.service - Start http
                 Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
                 Active: active (running) since Sat 2021-09-04 17:45:33 CST; 5h 57min aGo
               Main PID: 834761 (httpd)
                  Tasks: 7 (limit: 5782)
                 Memory: 6.3M
                 CGroup: /system.slice/httpd.service
                         ├─834761 /usr/local/apache/bin/httpd -k start
                         ├─835358 /usr/local/apache/bin/httpd -k start
                         ├─835359 /usr/local/apache/bin/httpd -k start
                         ├─835360 /usr/local/apache/bin/httpd -k start
                         ├─835361 /usr/local/apache/bin/httpd -k start
                         ├─835362 /usr/local/apache/bin/httpd -k start
                         └─836063 /usr/local/apache/bin/httpd -k start
              [root@slave02 ~]# ss -antl
              State         Recv-Q        Send-Q               Local Address:Port               Peer Address:Port        Process        
              LISTEN        0             128                        0.0.0.0:22                      0.0.0.0:*                          
              LISTEN        0             128                              *:80                            *:*                          
              LISTEN        0             128                           [::]:22                         [::]:*   
              

              以上就是入门shell脚本基础解析的详细内容,更多关于shell脚本的资料请关注我们其它相关文章!

              --结束END--

              本文标题: 入门shell脚本基础及原理

              本文链接: https://lsjlt.com/news/21377.html(转载时请注明来源链接)

              有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

              猜你喜欢
              • 入门shell脚本基础及原理
                目录1.特殊变量2.内部环境变量3.整数以及字符判断3.1整数判断3.2字符测试4.文件判断5.read输入6.if判断7.案例选择判断8.for循环9.while循环10.深入练习1.写一个脚本,输入三个数字进行相应的...
                99+
                2022-06-04
                shell脚本原理 shell脚本入门
              • linux shell脚本的基础知识整理
                这篇文章主要讲解了“linux shell脚本的基础知识整理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux shell脚本的基础知识整理”吧!Shell脚本:#!  指定...
                99+
                2023-06-09
              • Javaweb基础入门requse原理与使用
                request对象是什么? Request对象的作用是与客户端交互,收集客户端的Form、Cookies、超链接,或者收集服务器端的环境变量。request对象是从客户端向服务器发出...
                99+
                2024-04-02
              • Linux Shell脚本系列教程(一):Shell入门
                一、Shell简介 诸多类Unix操作系统的设计令人惊叹。即便是在数十年后的今天,Unix式的操作系统架构仍是有史以来最佳的设计之一。这种架构最重要的一个特性就是命令行界面或者shell。shell环境使得...
                99+
                2022-06-04
                脚本 入门 教程
              • linux shell脚本基础知识学习
                Shell脚本: 1、#! 指定脚本执行的shell2、# 注释 3、命令或语法结构echo "输入内容"echo 输出空行执行: 1、shell 脚本 sh example2、给shell脚本执行权...
                99+
                2022-06-04
                基础知识 脚本 linux
              • Shell脚本基础知识有哪些
                本篇内容主要讲解“Shell脚本基础知识有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Shell脚本基础知识有哪些”吧!Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁...
                99+
                2023-06-09
              • linux基础之Shell Script入门介绍
                linux基础之Shell Script 1 Shell Scipt使用指令和基本程序设计结构写成的程序,可以完成复杂的处理流程 1.1 程序书写 #!/bin/bash# Program:# ...
                99+
                2022-06-04
                入门 基础 linux
              • python入门jupyter基础操作及文本用法
                目录1.jupyter简介2.jupyter基础操作2.1windows更新pip库2.2jupyter安装2.3初次启动jupyter2.4设置密码进入jupyter#再次运行ju...
                99+
                2024-04-02
              • Linux shell脚本全面学习入门
                1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh   符号#!用来告诉系统它后面的参数是用来执行该文件的程序。...
                99+
                2022-06-04
                脚本 入门 Linux
              • Linux Shell 脚本编程入门教程
                从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在...
                99+
                2022-06-04
                脚本 入门教程 Linux
              • Linux系统shell脚本基础有哪些
                这篇文章将为大家详细讲解有关Linux系统shell脚本基础有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在Linux系统中shell脚本也像解释器一样,但它通常用于调用外部已编译的程...
                99+
                2023-06-28
              • shell脚本的基础指的是什么
                shell脚本的基础指的是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Q:1 Shell脚本是什么、它是必需的吗答:一个Shell脚本是一个文本文件,包含...
                99+
                2023-06-06
              • Mysql入门基础(1)-->基本介绍
                第一章      数据库概述          &nbs...
                99+
                2024-04-02
              • Shell脚本编程入门编写教程
                这篇文章主要讲解了“Shell脚本编程入门编写教程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shell脚本编程入门编写教程”吧!例子一:绘制特殊图形代码如下:#!/bin/bash&nb...
                99+
                2023-06-09
              • PHP入门介绍及语言基础
                🌱博客主页:大寄一场. 😘博客制作不易欢迎各位👍点赞+⭐收藏+➕关注 目录 前言 一、变量和数据类型 二、运算符和表达式 三、条件语句 四、循环语句 前言 PHP是一种非常流...
                99+
                2023-09-06
                php 开发语言
              • 计算机组成原理——基础入门总结(二)
                上一期的路径:基础入门总结(一) 目录 一.输入输出系统和IO控制方式 二.存储系统的基本概念 三.cache的基本概念和原理 四.CPU的功能和基本结构 五.总线概述 一.输入输出系统和IO控制方式 IO设备又可以被统一称为外部设备...
                99+
                2023-10-12
                嵌入式硬件 硬件工程
              • 什么是Shell?Shell脚本基础知识详细介绍
                Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和...
                99+
                2022-06-04
                详细介绍 基础知识 脚本
              • Shell脚本编程30分钟入门(小结)
                什么是Shell脚本 Shell脚本(英语:Shell script),又称Shell命令稿、程序化脚本,是一种电脑程序与文本文件,内容由一连串的shell命令组成,经由Unix Shell直译其内容后运作。被当成是一...
                99+
                2022-06-04
                Shell脚本编程入门 Shell脚本入门
              • linux shell(.sh)脚本编写和运行入门
                编写第一个shell脚本 在gedit中编写.sh格式的文件,保存为a.sh。 代码: #! /bin/bash # employ bash shell player1=xiaoming # define a ...
                99+
                2022-06-04
                linux shell脚本编写运行 shell脚本编写 编写shell脚本
              • Java SpringSecurity入门案例与基本原理详解
                目录1、入门案例1.1、创建SpringBoot项目1.2、勾选对应的maven依赖1.3、编写Controller路由1.4、启动项目2、基本原理2.1、Security的本质2....
                99+
                2024-04-02
              软考高级职称资格查询
              编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
              • 官方手机版

              • 微信公众号

              • 商务合作