Linux命令操作利器Shell入门基础

一、Shell的基础概念
    
    shell 简介:
        shell的家族有好多成员,sh是最古老的shell,
        bash是目前最流行的shell。

    shell 对于运维人员的重要性:    
        如果让一个linux运维工程师去机房管理上百台机器,
        就必须使用到自动化技术(通常是用Python或Shell),
        Python相对而言比bash脚本要庞大一些,
        并且bash脚本更加底层,在获取机器硬件配置方面更是有优势。
    
    几种常用的shell:
        sh:最古老的前辈,现在功能不够强大。
        csh:接近c语法的shell,不够流行。
        bash:最流行的shell,功能强大。
        ash:比较省资源的shell,但是不流行。

    shell脚本的用途有:
      自动化运维常用命令
      执行系统管理和故障排除
      创建简单的应用程序
      处理文本或文件

    如何进入shell:
        现在发行版本的linux一般都带有gui界面,
        可以在gui界面中通过terminal程序来模拟shell环境,
        或者(ctrl+alt)+F2-F6来切换到console模式,
        (ctrl+alt)+F1可以切换回GUI模式。
    
    Shell编程的特点:
        Shell编程是过程式、解释执行。     

    本文将如何介绍Shell基础?
        本文已假定你们已熟练C语言的基本语法,
        并且假定熟练基本的shutdown、ifconfig等常见命令。
        需要学习Linux文本处理工具可参考博文:cnblogs.com/kading/p/10923025.html    

二、Shell基础格式和名词概念

    Shell编程语言的基本结构:
        各种系统命令的组合
        数据存储:变量、数组
        表达式:a + b
        语句:if,while,for 
    
    shell 提示符:
        例如:[root@localhost ~]#reboot 
        上面这一句包括了5个信息,
            当前登录用户为root,
            当前主机为localhost,
            当前所在目录为/root,
            root为管理员身份,
            将要执行reboot操作。
        shell的提示符是指除reboot的部分,
            提示符特指例子中的[root@localhost ~]#,这一部分。
            提示符的格式为,当前登录用户@当前主机 $代表普通用户,#代表管理员。

    创建shell脚本 以及运行

          第一步:创建然后用vi或gedit等工具来编辑。
                第一行必须包括shell声明序列:#!
                示例:#!/bin/bash

          第二步:规范脚本,你需要添加脚本的注释,作者信息,程序版本号等内容。
                注释以#开头,脚本出问题时非常管用。
    
          第三步:运行脚本
                给予执行权限,然后执行。

    创建第一个shell脚本:
        >>>
        #!/bin/bash
        # Author : Steven KE      
        echo "What is your name?"
        read PERSON
        echo "Hello, $PERSON"
        <<<    
    
        脚本的头部: #!/bin/bash 
        这个头部告诉linux系统,使用哪个解释器解释这段文本。
        有个这个头部,Linux就会使用/bin/bash去解释下面的语句。
        echo "",  $后面接变量名,如$PERSON, 建议变量名使用全大写表示。
        还有就是,与c语言不同的语法,
        等号前后不能有空格,加号前后必须有空格,这些细节后面还会反复强调。
        

三、Shell中使用的变量
    
    Shell中会使用到局部变量、环境变量、Shell变量

    变量类型:
            局部变量,环境变量,Shell变量
            特别说一下Shell变量,Shell变量里包含着局部变量,
            Shell变量还包含着某些环境变量,你可把这部环境变量理解为全局变量。

    局部变量:
        定义变量
            建议数字直接赋给变量,需要原样输出的用单引号,其余均用双引号。
        
        使用变量,变量赋值。
            默认所有变量即使是数字赋值,也会作为字符串来处理。
            如果需要特别强调该变量是数字类型,可用declare,
            这点与其他脚本语言有区别。
        
        变量引用,修改变量的值
            可以直接给变量赋值,改变该变量的内容。
        
        删除变量的值
            unset语法用来删除变量,unset abc,删除abc这个变量。
        
        单引号和双引号的区别                 
           单引号,表示强引用,而保持原字符串输出。
            单引号表示原样输出,即使遇到$变量,也原样输出。
            双引号,表示弱引用,其中的变量引用会被替换为变量值。   
        
        命令引用即得到命令结果再赋值
            建议用abc = $(command), 不推荐用 abc=`command` 这种语法。
        
        只读变量用法
            readonly abc 表示abc这个变量是只读的,这意味着修改或删除都会报错。
 
        显示已定义的所有变量:set
   
        删除变量:unset name
  
    环境变量:
            变量声明、赋值:   export name=VALUE  或者  declare -x name=VALUE
       
       显示所有环境变量:   
            env 或者 printenv 或者 export declare -x
  
   
        Bash内建的环境变量有:
           PATH       SHELL       USER       UID
           HOME       PWD           HOSTNAME     
           _下划线
  
  

    所有变量中按不同的分类标准继续分:
        特殊变量: 
              $0,$n,$#,$*,$@,$?,$$的含义
                $0表示当前脚本的名字
                $1,$2,$n等,表示第n个参数的名字
                $# 表示参数的数量
                $*、$@ 表示所有参数 , 后者更强调参数分开表示 
                    注意:$@ $* 只在被双引号包起来的时候才会有差异,
                        当他们被双引号包起来时,后者会把每个成员用双引号包住。
                $? 表示上一次执行脚本成功的情况。 通常0代表成功。
                $$ 表示当前脚本的进程PIN值
                 set -- 清空所有位置变量
        退出状态$? :              
              注意:脚本中一旦遇到exit命令,脚本会立即终止;
                    终止退出状态取决于exit命令后面的数字
              注意:如果未给脚本指定退出状态码,特指最后一条命令的状态码。
                        通常0代表成功,1代表失败。


         只读变量:    
      
              声明只读变量:readonly name 或  declare -r name

              查看只读变量: readonly -p

         Shell 字符串:
            字符串长度获取用${#variable}
            提取子字符串用${variable:0:4}
            查找子字符串用 `expr index $varibale is`   这部分内容需要细化讲。

         Shell 数组:
            定义数组,array=(a b c d)
            读取数组,${array[0]}
            获取数组的长度,${#array[@]} , 或者 ${#array[*]},或者 ${#array[n]}    

四、Shell中使用的运算符和基础语法

    Shell 运算符:
        Shell算术运算符
            +, -, *, /, %取模(取余), **(乘方),乘法符号有些场景中需要转义。
             随机数变量:$RANDOM(0-32767)
            例如:echo $[$RANDOM%50] 表示生成 0 - 49 之间随机数
            Shell本身不支持数字运算,他需要借助expr表达式来运算数字。
        关系运算符
            -gt 表示大于, -eq表示等于, -ne表示不等于。
        布尔运算符
            被关系运算符包含的概念
       

  算数运算:           
        Bash不支持算术运算,需要借助expr实现。
       例如: var=$(expr arg1 arg2 arg3 ...)
                    
    算术赋值:
      增强型赋值:
      +=, -=, *=, /=, %=
      let varOPERvalue
      例如:let count+=3
      自加3后自赋值     
  
    逻辑运算(C语言中 &、| )(与、或、非)
      
  短路运算(C语言中 &&、|| )(短路与、短路或、异或^)     
      异或:^
      异或的两个值,相同为假,不同为真

    Shell 注释
        单行注释用 # 
        多行注释没有,可以考虑用{}定义为一个函数,但是不调用。

    命令行参数
        命令行参数个数用$#, 具体地第一个参数$1,第n个参数$n 

    Shell字符串输出转义
        -e、-n
        默认字符串里的\n会原样输出    ,在echo时指定 -e,表示转义后输出。
        -n表示 只对字符串里面的\n 进行转义,其他的按默认转义设定来输出。

    比较灵活的语句:
        ${var:=word},若var为空,则给var赋值,表达式返回word。
        ${var:+word},若var不为空,则表达式返回word。    

    Shell echo 命令
        显示转义字符
            echo -e "\"nice\""
        显示变量
            echo ${variable}
        显示换行
            echo -e "this is a test\n"
            echo "this is a test"
        显示不换行
            echo -e "this is a test\c"
            echo "this is a test"
        显示结果重定向到文件中
            echo "a test string" > file.txt
        原样输出字符串
            echo '$yourStringWillNotWork'
        显示命令输出
            echo `command` 或者 echo $(command) 
            为了便于阅读,实际编写时建议用 $(command)

    Shell printf 命令
    相比c语言的printf
        有四点需要注意的
        1.不需要括号
        2.format格式化部分不需要引号
        3.format格式化部分不需要重复写,会自动复用。
        4.参数用空格分割而不是逗号。
    相比echo
        echo会自动换行,printf不会自动换行,要手动加\n完成换行。

        
五、高级运算符(测试运算符)
     字符串运算符
            字符串长度是否为0,两字符串是否相同的比较,运算结果只能是bool类型。
     文件测试运算符
            -r -w -x -e -d -s 后面接 文件名。-s表示文件大小是否为零。
            举例: if [ -r $filename ] ,结果只能是bool类型。
    //TODO

六、初级语句,read,if case 
    //TODO

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值