shell脚本入门看着一篇就够了

如何运行一个shell脚本

    脚本运行需要执行权限,当我们给一个文件赋予执行权限后,该脚本就可以运行。  
    #chmod u+x filename  
    如果不希望赋予脚本执行权限,那么可以使用bash命令来运行未给予执行权限的脚本bash fiename
    #bash filename

shell的特殊符号

    ~:                家目录    # cd ~ 代表进入用户家目录
    !:                执行历史命令   !! 执行上一条命令
    $:                变量中取内容符
    + - * \ %:       对应数学运算  加 减 乘 除 取余数  
    &:                后台执行
    *:                星号是shell中的通配符  匹配所有
    ?:                问号是shell中的通配符  匹配除回车以外的一个字符
    ;:               分号可以在shell中一行执行多个命令,命令之间用分号分割
    |:               管道符 上一个命令的输出作为下一个命令的输入   cat filename | grep "abc"
    \:                转义字符
    ``:               反引号 命令中执行命令    echo "today is `date +%F`"
    ' ':              单引号,脚本中字符串要用单引号引起来,但是不同于双引号的是,单引号不解释变量
    " ":              双引号,脚本中出现的字符串可以用双引号引起来

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sMCBXCsG-1631951110863)(C:\Users\htuser\Desktop\笔记\shell\shell.assets\image-20210830110953244.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cvhtotx9-1631951110866)(https://raw.githubusercontent.com/Thobian/typora-image/master/demo/202109/06/153815-656171.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F9E6SvhZ-1631951110871)(C:\Users\htuser\Desktop\笔记\shell\shell.assets\image-20210830111354743.png)]

shell管道

 |  管道符在shell中使用是最多的,很多组合命令都需要通过组合命令来完成输出。管道符其实就是下一个命令对上一个命令的输出做处理。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EmBTjchh-1631951110874)(C:\Users\htuser\Desktop\笔记\shell\shell.assets\image-20210830111705411.png)]

shell重定向

     >   重定向输入  覆盖原数据
     >>  重定向追加输入,在原数据的末尾添加
     <   重定向输出     wc -l < /etc/passwd
     <<  重定向追加输出  fdisk /dev/sdb <

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-guQxMsi6-1631951110875)(C:\Users\htuser\Desktop\笔记\shell\shell.assets\image-20210830112101137.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-enUejQdt-1631951110878)(C:\Users\htuser\Desktop\笔记\shell\shell.assets\image-20210830112126824.png)]

shell数学运算

         expr 命令:只能做整数运算,格式比较古板,注意空格
             [root@baism ~]# expr 1 + 1
             2
             [root@baism ~]# expr 5 - 2
             3
             [root@baism ~]# expr 5 \* 2  #注意*出现应该转义,否则认为是通配符
             10
             [root@baism ~]# expr 5 / 2
             2
             [root@baism ~]# expr 5 % 2
             1
         使用bc计算器处理浮点运算,scale=2代表小数点保留两位
             [root@baism ~]# echo "scale=2;3+100"|bc
             103
             [root@baism ~]# echo "scale=2;100-3"|bc
             97
             [root@baism ~]# echo "scale=2;100/3"|bc
             33.33
             [root@baism ~]# echo "scale=2;100*3"|bc
             300
         双小圆括号运算,在shell中(( ))也可以用来做数学运算
             [root@baism ~]# echo $(( 100+3))
             103
             [root@baism ~]# echo $(( 100-3)) 
             97
             [root@baism ~]# echo $(( 100%3))
             1
             [root@baism ~]# echo $(( 100*3))
             300
             [root@baism ~]# echo $(( 100/3))
             33
             [root@baism ~]# echo $(( 100**3))     #开方运算
             1000000

退出脚本

exit NUM 退出脚本,释放系统资源,NUM代表一个整数,代表返回值。

echo命令

echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。 该命令的一般格式为:echo [ -n ]字符串

其中选项n表示输出文字后不换行;字符串能加引号,也能不加引号。用echo命令输出加 引号的字符串时,将字符串原样输出;用echo命令输出不加引号的字符串时,将字符串中 的各个单词作为字符串输出,各字符串之间用一个空格分割。

功能说明:显示文字。

命令选项:

-n不要在最后自动换行

-e若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:

转义字符

\a发出警告声;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JTejbpvF-1631951110881)(C:\Users\htuser\Desktop\笔记\shell\shell.assets\image-20210831151539457.png)]

\b删除前一个字符;

\c最后不加上换行符号;

\f换行但光标仍旧停留在原来的位置;

\n换行且光标移至行首;

\r光标移至行首,但不换行;

\t插入tab;

\v与\f相同;

\插入\字符;

\nnn插入nnn(八进制)所代表的ASCII字符;

–help显示帮助–version显示版本信息

read命令

默认接受键盘的输入,回车符代表输入结束

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yNO979S7-1631951110883)(C:\Users\htuser\Desktop\笔记\shell\shell.assets\image-20210831152654802.png)]

read 命令选项

-p打印信息

-t限定时间

-s不回显

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Ww7FoEf-1631951110885)(C:\Users\htuser\Desktop\笔记\shell\shell.assets\image-20210831152835275.png)]

-n输入字符个数

shell变量

image-20210905135724636

image-20210905140306281

定义在文件中属于永久变量

临时变量(关闭终端和重启后消失)

image-20210905141546231

image-20210905140613114

shell数组

多数赋值

image-20210905142440681

单数赋值

image-20210905142752317

查看数组

image-20210905150621725

!image-20210905150608525

image-20210905150547009

关联数组

可以自定义数组的标识

image-20210905151234756

image-20210905151255034

if判断

image-20210905151519829

在shell中对小数点识别不太友好,可以用以下方法进行判断

image-20210905151901347

image-20210905152150013

字符串比较运算

   运算符解释,注意字符串一定别忘了使用引号引起来
         ==          等于   
         !=          不等于
         -n          检查字符串的长度是否大于0  
         -z          检查字符串的长度是否为0

逻辑运算

          逻辑与运算       &&   
          逻辑或运算       ||  
          逻辑非运算      !

文件比较与检查

         -d  检查文件是否存在且为目录
         -e  检查文件是否存在
         -f  检查文件是否存在且为文件
         -r  检查文件是否存在且可读
         -s  检查文件是否存在且不为空
         -w  检查文件是否存在且可写
         -x  检查文件是否存在且可执行
         -O  检查文件是否存在并且被当前用户拥有
         -G  检查文件是否存在并且默认组为当前用户组
         file1 -nt file2  检查file1是否比file2新
         file1 -ot file2  检查file1是否比file2旧

image-20210905152933460

if语法

适用范围:只需要一步判断,条件返回真干什么或者条件返回假干什么。

语句格式

if [ condition ]           #condition 值为true or false
   then
      commands
fi

该语句翻译成汉语大意如下:

假如  条件为真 
那么    
执行commands代码块
结束

image-20210905154026635

适用范围:只需要一步判断,条件返回真干什么或者条件返回假干什么。

语句格式

if [ condition ]
     then
          commands1
else
          commands2
fi

该语句翻译成汉语大意如下:

假如条件为真
  那么
        执行commands1代码块
否则
        执行commands2代码块
结束

if高级用法

条件符号使用双圆括号,可以在条件中植入数学表达式

通过代码来看下吧

image-20210905154828792

使用双方括号,可以在条件中使用通配符

通过代码看下 ,为字符串提供高级功能,模式匹配 r* 匹配r开头的字符串

image-20210905154920026

for循环

for var in value1 value2 ......
    do
        commands
done

接下来看段代码吧,循环输出1-9数字

seq数数工具

image-20210905155407421

代码演示

image-20210905155450928

代码执行结果

img

控制循环

!image-20210905165937120

加上参数 ping -c 次数 ip &> 输入

image-20210905170848684

跳出循环

image-20210905171130322

while语法

while  [ condition ]      #注意,条件为真while才会循环,条件为假,while停止循环
 do
             commands
done

image-20210905171844077

read:输入信息

image-20210905171909642

多条件循环

image-20210905172135996

image-20210905172213946

linux shell中"2>&1"含义

在计划任务中经常可以看到。例如我们公司的计划任务举例:

*/2 * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index.php task testOne >/dev/null 2>&1
*/2 * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index.php task testTwo >/dev/null 2>&1

对于& 1 更准确的说应该是文件描述符 1,而1标识标准输出,stdout。
对于2 ,表示标准错误,stderr。
2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null

可以把/dev/null 可以看作"黑洞". 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.

偶尔也可以把 & 在命令的最后加上,表示让程序后台执行。

set -ex 全部命令打印以及错误提前结束

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值