您的位置:首页 > 教程 > linux > 入门shell脚本基础及原理

入门shell脚本基础及原理

2022-06-19 20:30:20 来源:易采站长站 作者:

入门shell脚本基础及原理

目录1.特殊变量2.内部环境变量3.整数以及字符判断3.1整数判断3.2字符测试4.文件判断5.read输入6.if判断7.案例选择判断8.for循环9.while循环10.深入练习1.写一个脚本,输...3Ot站长之家-易采站长站-Easck.Com

目录
1.特殊变量
2.内部环境变量
3.整数以及字符判断
3.1整数判断3Ot站长之家-易采站长站-Easck.Com

3.2字符测试
4.文件判断
5.read输入
6.if判断
7.案例选择判断
8.for循环
9.while循环
10.深入练习
1.写一个脚本,输入三个数字进行相应的加减乘除
2.猜数字游戏3Ot站长之家-易采站长站-Easck.Com

3.写一个脚本,让nginx服务设置开机自启
4.利用for循环,创建user序号1-100的用户
5.利用while循环,计算1+2…100的值
6.apache简单的一个编译部署脚本

3Ot站长之家-易采站长站-Easck.Com

1.特殊变量

$#:查看变量参数的个数3Ot站长之家-易采站长站-Easck.Com
$0:查看脚本的名字3Ot站长之家-易采站长站-Easck.Com
$!:查看shell后台的pid3Ot站长之家-易采站长站-Easck.Com
$@:查看传递脚本所有参数的列表3Ot站长之家-易采站长站-Easck.Com
$*:查看所有参数的列表,单字符串形式显示3Ot站长之家-易采站长站-Easck.Com
$$:脚本本身进程的ID3Ot站长之家-易采站长站-Easck.Com
$?:上一条命令的结果,显示0则成功,不是0则失败3Ot站长之家-易采站长站-Easck.Com

3Ot站长之家-易采站长站-Easck.Com

2.内部环境变量

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

3Ot站长之家-易采站长站-Easck.Com

3.整数以及字符判断

3Ot站长之家-易采站长站-Easck.Com

3.1整数判断3Ot站长之家-易采站长站-Easck.Com

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

3Ot站长之家-易采站长站-Easck.Com

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

3Ot站长之家-易采站长站-Easck.Com

4.文件判断

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

3Ot站长之家-易采站长站-Easck.Com

5.read输入

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

3Ot站长之家-易采站长站-Easck.Com

6.if判断

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

3Ot站长之家-易采站长站-Easck.Com

7.案例选择判断

case $变量名 in            
'value1')                
 statement                
 ...                
 ;;            
'value2')                
 statement                
 ...                
 ;;            
*)                
 statement                
 ..                
 ;;        
esac

#case支持的通配符:
    *           //任意长度任意字符
    ?           //任意单个字符
    []          //指字范围内的任意单个字符
   start|START  //俩种选择

3Ot站长之家-易采站长站-Easck.Com

8.for循环

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

3Ot站长之家-易采站长站-Easck.Com

9.while循环

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

3Ot站长之家-易采站长站-Easck.Com

10.深入练习

3Ot站长之家-易采站长站-Easck.Com

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

3Ot站长之家-易采站长站-Easck.Com

2.猜数字游戏3Ot站长之家-易采站长站-Easck.Com

规则:指定一个数字,只要猜到了这个数字则过关,否则显示数字大了或者数字小了3Ot站长之家-易采站长站-Easck.Com

[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
猜对

3Ot站长之家-易采站长站-Easck.Com

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进程数量则认为开启服务,否则认为服务开启失败

3Ot站长之家-易采站长站-Easck.Com

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

3Ot站长之家-易采站长站-Easck.Com

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即可

3Ot站长之家-易采站长站-Easck.Com

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脚本的资料请关注我们其它相关文章!3Ot站长之家-易采站长站-Easck.Com

如有侵权,请联系QQ:279390809 电话:15144810328

相关文章

  • Linux下用GHOST来做系统备份

    Linux下用GHOST来做系统备份

    在Windows系统下备份我们可以用GHOST工具软件完成,Linux系统不能完全依赖于GHOST工具,一则是GHOST本身是有版权的软件,二是GHOST只支持ext2、ext3文件系统的Linux分区,不支持reiserfs、xfs等
    2019-10-25
  • 给 FreeBSD 12.1 安装 GNOME3 图形界面

    给 FreeBSD 12.1 安装 GNOME3 图形界面

    FreeBSD是一个完全开放的、安全的系统,可以Do it yourself的系统。但是个人还是不喜欢呆板的命令行界面,所有就给 FreeBSD 12.1 安装 GNOME3 图形界面。 开始操作,启动FreeBSD 12.1,以root身份
    2019-10-27
  • Ubuntu Studio一个不错的操作系统

    Ubuntu Studio一个不错的操作系统

    Ubuntu Studio 是一个基于 Ubuntu 而面向音频、视频及图形爱好者的操作系统。本次推出的 Ubuntu Studio 为 7.04 版,目前仅支持 Intel i386 兼容的处理器。 Ubuntu Studio 从大量的开源多媒体创作程序
    2019-10-25
  • 最受欢迎的10款Linux免费游戏

    最受欢迎的10款Linux免费游戏

    图为在Linux下运行的免费游戏America's Army 如果你认为 Linux下没有什么好游戏的话,那就错了!我们来看看Linux下最受欢迎的10款游戏吧,而且这些游戏都是完全免费的! # skyreal update(06-12
    2019-10-25
  • compiz fusion特效使用心得(附3D桌面图)

    compiz fusion特效使用心得(附3D桌面图)

    3D桌面图 LINUX发行版就是好,当大多数人还在沉迷于那些什么风格图标鸟玻璃效果甚至孜孜不倦津津乐道的时候,Linux的高手们已经悄悄为我们开启了一个桌面系统3D的时代。 当我第一次
    2019-10-25
  • Ubuntu 下aMule 的安装配置

    Ubuntu 下aMule 的安装配置

    aMule 是一个类似于 eMule 的多平台 P2P 客户端程序。以下将简略叙述 aMule 在 Ubuntu 中的安装及配置 [High ID] 与 [KAD] 的过程。 安装: sudo apt-get install amule sudo apt-get install amule-utils 如果需要
    2019-10-25
  • JMeter jp@gc - stepping thread group插件

    JMeter jp@gc - stepping thread group插件

    这是一个出单接口压力测试的小例子,了解一下压力测试最最基础的基础。出单接口是用来保险出单的,不需要在UI界面下一步下一步的出单,接口一调数据入库完事~~~。再啰嗦一句接
    2019-10-27
  • Ubuntu 下使用K3B软件刻录光盘(图)

    Ubuntu 下使用K3B软件刻录光盘(图)

    不知大家会不会在Ubuntu下刻录光盘呢?k3b是KDE环境下的一个CD/DVD刻录软件,有非常容易使用的界面,功能比较齐全。用起来感觉就象是win下的Nero一样简单自然,比ubuntu里原来的刻录CD方式
    2019-10-25