shell的基础知识

一、什么是shell?

    Shell是linux的一外壳,它包在linux内核的外面,为用户和内核之间的交互提供了一个接口
    当用户下达指令给操作系统的时候,实际上是把指令告诉shell,经过shell解释,处理后让内核做出相应的动作
    系统的回应和输出的信息也由shell处理,然后显示在用户的屏幕上

二、什么是shell脚本?

    简单的说,当命令或者程序不在命令行执行,而是通过一个程序文件来执行,这个程序就被称为shell脚本
    也就是在shell脚本里内置了多条命令,语句,循环控制,然后将这些命令一次性执行完毕,这种通过文件执行命令的方式称为非交互式

三、为什么使用shell脚本?

    适合处理操作系统底层的业务,有众多系统命令为其做支撑(还有文本处理三兄弟grep,sed,awk)
    适合处理纯文本文件,linux中许多服务配置文件,启动脚本,都是纯文本(httpd,nfs,mysql,nginx,lvs)
    linux系统脚本用shell开发更简单

四、如何查看系统默认shell?

三种方式:
[root@localhost ~]# cat /etc/passwd | head -1
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# echo $SHELL
/bin/bash

  
   

五、脚本开发规范

   

一个完整的shell脚本需要有以下几个部分:

    脚本名:最好以.sh结尾
    第一行:#!/bin/bash
    指定解释器:由哪个程序来执行脚本内容
    #!:幻数
    注意:#!/bin/bash必须写在第一行,否则会被认为是注释
    有用户判断,否则任何用户都可以执行这个脚本
    有流程控制,否则只是把简单的命令进行顺序操作,没有成功与否的判断
    注释:可以命令后,也可以自成一行(方便自己也方便他人)

[root@localhost ~]#vim test.sh
#!/bin/bash
#Date:2018-12-14
#Author:westos-wsp
#Connect:wsp439@sina.com
#Desc:This script is for...
#Version:1.0

LOG_UID=/var/log
ROOT_UID=0
##判断是否是超级用户
if [ "$UID" -ne "$ROOT_UID" ];then
        echo "Error:you should be root to run this script"
        exit 1
fi
##判断能否进入目录
cd $LOD_DIR || {
        echo "Cannot access to directory."
        exit 1
}
cat /dev/null > messages && {
        echo "Logs cleaned up..."
        exit 0
}
echo "Logs cleaned failed..."
exit 1

  

六、 脚本执行方法

    sh script.sh | bash script.sh
    没有执行权限时

[root@localhost ~]# sh log.sh
Logs cleaned up...

  

    path/script.sh | ./script(要在脚本的当前目录下
    绝对路径,需要给脚本添加执行权限

 [root@localhost ~]# /root/log.sh
-bash: /root/log.sh: Permission denied     ##没有执行权限时,不可执行
[root@localhost ~]# chmod +x log.sh
[root@localhost ~]# /root/log.sh           ##添加权限后正常执行
Logs cleaned up...

   

source script.sh | . script.sh (点后空一下,加上脚本名字)

 

 

    
    这种方式会使用source或.号来读如入指定shell文件,

并会把其他shell中的变量值或函数返回给父shell继续使用

前两种方式,在执行脚本的时候,会默认打开一个新的shell,

而新shell的变量值和函数不会返回给父shell

如:./test.sh

 [root@localhost mnt]# vim test.sh
#!/bin/bash
username=`whoami`
[root@localhost mnt]# sh test.sh
[root@localhost mnt]# echo $username        ##无返回值

[root@localhost mnt]# source test.sh
[root@localhost mnt]# echo $username        ##有返回值
root
 
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值