学习Shell脚本入门(重定向,管道符)

目录

shell课程大纲

Shell的作用------命令解释器,“翻译器”

shell 功能

一、如何写一个shell脚本

二、如何运行一个shell脚本

三、shell中的特殊符号

四、shell中的管道运用

五、shell重定向

六、shell数学运算


日常运维工作大部分是一些繁琐的重复的工作,每天80%的工作就是重复干昨天的事情,而且工作量还比较大,那么摆在运维面前的选择就是:

A:自己搞定一切

B:让机器搞定一切

当然,谁不愿意喝着茶水,逗着前台妹子过完愉快的一天呢!如何让机器搞定一切,得以解放自己

shell课程大纲

Shell的作用------命令解释器,“翻译器”

介于系统内核与用户之间,负责解释命令行

shell 功能

命令行解释功能

启动程序

输入输出重定向

管道连接

文件名置换 (echo /*)

变量维护

环境控制

shell编程                     

shell脚本就是将完成一个任务的所有的命令按照执行的先后顺序,自上而下写入到一个文本文件中,然后给予执行权限。                                                                                                                   

一、如何写一个shell脚本

shell脚本的命名:

名字要有意义,最好不要用a、b、c、d、1、2、3、4这种方式命名;
虽然linux系统中,文件没有扩展名的概念,依然建议你用.sh结尾;
名字不要太长,最好能在30个字节以内解决。
例如:check_memory.sh

shell脚本格式:

shell脚本开头必须指定脚本运行环境 以 #!这个特殊符号组合来组成。
如: #!/bin/bash 指定该脚本是运行解析由/bin/bash来完成的;

shell中的注释使用 # 号

二、如何运行一个shell脚本

脚本运行需要执行权限,当我们给一个文件赋予执行权限后,该脚本就可以运行。
#chmod +x filename


如果不希望赋予脚本执行权限,那么可以使用bash命令来运行未给予执行权限的脚本bash fiename
#bash filename

三、shell中的特殊符号


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

四、shell中的管道运用

|  管道符在shell中使用是最多的,很多组合命令都需要通过组合命令来完成输出。
管道符其实就是下一个命令对上一个命令的输出做处理。
[root@localhost opt]# ls /opt |wc
      2       2      12

修改密码
[root@localhost opt]# echo "123123" |passwd --stdin zhangsan
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新

[root@test1 ~]# grep "/bin/bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
zhangsan:x:1000:1000:zhangsan:/home/zhangsan:/bin/bash
lisi:x:1001:1001::/home/lisi:/bin/bash
[root@test1 ~]# grep "/bin/bash$" /etc/passwd | awk -F: '{print $1,$7}'
root /bin/bash
zhangsan /bin/bash
lisi /bin/bash

五、shell重定向

 

[root@localhost ~]#ls >/dev/pts/1
#打开两个终端,ls命令显示到终端1上 标准重定向省略了1>

[root@localhost ~]#xxx >/dev/pts/1
##错误重定向
bash: xxx: 未找到命令...
[root@localhost ~]#xxx 2>/dev/pts/1
##会在另一边显示

[root@localhost ~]#rm xxx.txt >/dev/pts/1
#提示信息也是错误
rm: 无法删除"xxx.txt": 没有那个文件或目录
[root@localhost ~]#rm xxx.txt 2>/dev/pts/1

[root@localhost ~]#ls /data /error >all.log 2>&1
#既有错误也有正确 &符号表示分隔符
[root@localhost ~]#cat all.log 
ls: 无法访问/error: 没有那个文件或目录
/data:
apr-1.6.2.tar.gz
apr-util-1.6.0.tar.gz
httpd-2.4.29.tar.bz2

[root@localhost ~]#ls /data /error >all.log 2>1
#如果没有&会生成一个 1文件 将错误导入

[root@localhost ~]#cat bc.log 
2*6
[root@localhost ~]#bc <bc.log


[root@test1 ~]# vim passwd.txt\\重定向输入
123321
[root@test1 ~]# setenforce 0     \\关闭selinux否则会有问题
[root@test1 ~]# passwd --stdin lisi <passwd.txt 
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@test1 ~]# cat passwd.txt 
123321
[root@test1 ~]# echo "123123" > passwd.txt     //单个覆盖,多个不覆盖追加
[root@test1 ~]# cat passwd.txt 
123123
[root@test1 ~]# ls > passwd.txt            //将命令结果放进文本中
[root@test1 ~]# cat passwd.txt 
bin
cpu
disk.sh
first.sh
f.sh
gs.sh
g.txt
passwd.txt
sdb.sh
source
test.sh

[root@test1 ~]# cat passwd.txt 
123123
[root@test1 ~]# echo "123123" >> passwd.txt 
[root@test1 ~]# cat passwd.txt 
123123
123123
[root@test1 ~]# id wa 2>error.log     //将错误信息写入error.log
[root@test1 ~]# cat error.log 
id: wa: no such user
[root@test1 ~]# id wa >error.log      //不加2 无法写入
id: wa: no such user
[root@test1 ~]# cat passwd.txt error.log &>new   //混合输入无论对错
[root@test1 ~]# cat new 
bin
cpu
disk.sh
first.sh
f.sh
gs.sh
g.txt
passwd.txt
sdb.sh
source
test.sh
cat: error.log: 没有那个文件或目录

#不能将正确和错误一起显示出来
[root@centos7 ~]#ls /data /xxx > /data/all.log 2>&1
[root@centos7 ~]#ls /data /xxx 2> /data/all.log 1>&2
[root@centos7 ~]#ls /data /xxx &> /data/all.log 
[root@centos7 ~]#ls /data /xxx >& /data/all.log 

#[root@centos7 ~]#ls /data /xxx 2>&1 > /data/all.log

六、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

总结

主要学习shell脚本的基础,掌握shell脚本对以后的工作会很方便

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值