温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

shell脚本基础及原理的示例分析

发布时间:2021-09-06 14:25:26 来源:亿速云 阅读:168 作者:小新 栏目:开发技术

小编给大家分享一下shell脚本基础及原理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

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脚本基础及原理的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI