shell学习笔记(一)

【Shell什么?】               

Shell是一个负责把用户语法的语言解释成系统与内核调用的解释程序——命令解释器

                            即使用户交互的界面也是控制系统的脚本语言

 

【Shell分为两大类  】        

Algol 语言风格:     sh,ksh,bash

                            C语言风格:              csh,tcsh

echo $SHELL                 查看shell类型

echo $SHLVL                 查看嵌套层数

 

【每个终端的shell与用户启动的shell】

1、用户登录与shell的关系

              a、服务器启动login

              b、用户输入帐号与口令、

              c、服务器打开/etc/passwd            /etc/shadow

                                                        /etc/group      /projects等文件

              d、检验用户信息,并且打开的信息保存在内存中这些信息用公用的名字:

环境变量LOGNAME  USERHOMESHELLUIDMALL

                            e、切换到主目录${HOME}

                            f、启动shellloginshell / 登录shell /注册shell

2shell的启动方式

                            a、登录方式启动:登录时候默认启动方式是登录shell

用户也可以使用登录方式启动,bash –loginbash –l

                            b、用户方式启动:bash

启动方式的不同:shell启动的时候还做了如下工作,加载如下几个脚本/etc/profile, ~/.bashrc~/.bash_profile或者~/.bash_login或者~/.profile)三个文件的其中一个.

登录shell全部加载

非登入shell不全部加载~/.bashrc

 

【第一个shell脚本】

              1shell编程的方式

                            a、交互式shell编程:        命令行shell语句

                            b、非交互式shell编程:执行的语句存放到一个文件中——shell脚本:建议扩展名为.sh

2shell脚本语言(algol语法)

                            work                     字面值(word)、标示字(name)、保留字、使用空格和tab键分割

                            语句statement      使用回车键等分割

                            block                     多种(流程控制块、函数块)

              3、使用语句的多种形式

                                                   分隔的语句

                            ||                       分割语句:一个成功就终止

                            &&                     分割语句:一个失败终止

                            |                          分隔语句:管道

                            &                         必须加载语句

                            <newline>        必须在语句最后

              4、使用块      a(语句列表)           eg:(pwd;date)

                                          b、{语句列表;}  eg:{ pwd;date;}

              5、元字符:容易歧义字符:        |                  &           ()                       空格    <>                       |                          回车

【shell的执行】

              1、在第一行使用#!/bin/bash指定shell程序,#!指定解释当前脚本文件的程序

2、命令行优先制定shell程序,命令行没有,则代码中优先,都没有,采用命令行默认shell程序

3、把脚本.sh设置可执行文件#chmod +x filename.sh

4、多行注释

              :<<BLOCK    ->注释开始      将BLOCK之间的代码重定向到一个不存在的命令中,

                            ……                                             从而间接的实现了多行注释         

              BLOCK                            ->注释结束

 

【变量】

              1、声明与使用

                            变量名=值                  (没有空格)变量没有数据类型

                            ${变量名}                    如果没有歧义情况{}可以省略为: $变量名

             

declare             变量属性        变量名称

等同   typeset            -p                        显示所有变量的值

                            -i                          定义为整数,若求值失败或不是整数设置为0

                            -r                         声明为只读变量,不允许修改或删除

                            -a                        声明为数组

                            -f                         显示所以自定义函数,包括名称和函数

                            -x                        设置成环境变量


eg:  #!/bin/bash

a=20

b=hello

echo ${a}${b}

echo $a$b

declare -i d=20+30

echo $d

declare -i e

e=45+55

echo $



2、变量名的作用范围与导出变量

                            a、作用范围(){}的差异

                                          ()执行另外建立子shell环境来执行(两个不同环境)

                                           {} 在当前shell环境执行,同一环境中

                            bshell脚本与shell脚本之间

                                          fork调用         直接调用:建立子进程执行

                                          exec调用        加载调用:使用shell替代当前代码

                                          source调用    代码包含:等价于c#include

                            c、全局永远不要指望访问局部,局部可以访问全局,bash需要做额外处理

                            e、函数内部定义的变量也属于全局变量          

                        f、局部变量定义local                      eg:local v2=200

                                          函数定义了两个相同变量名的全局变量和局部变量,函数内部优先使用局部变量

             

3、特殊的变量

                            PATH:执行程序的搜索路径

                            PS11级命令提示符

                            PS22级命令提示符

                                          提示符号支持特殊的转义符号

                            使用man  bash帮助找到PS支持的所有转义符并且在~/.bash_profile设置自己喜欢的提示符

 

              4、命令行变量

                            $0                      命令本身

                            $1…$9                             命令行参数

                            $*  $@           所有命令行参数

                            $#                       命令行参数个数

                            $?                    状态码0-255,用来获取shell命令的执行状态,如果成功执行,返回值0,失败则返回1

                            $$                       当前shell进程ID

 

              5、销毁变量               unset                 eg:unset           v

 

【赋值】

              1、简单赋值                             a=20

 

              2、值的歧义的解决                                          var=123

                            "  "    :保持语法意义                     a="hellowo${var}rld"输出hello wo123rld

'  '       :保持原字符意义                a='hellowo${var}rld'输出hello wo${var}rld

$'  '     :支持转义字符                     a=$'hell\to\two${var}rld'输出hell o wo${var}rld



接下内容在 SHELL 笔记续篇中

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值