【Linux从零开始】:6.学习Bash与Shell Script(1)

  过了2周,终于学到shell cripte的编写了,回头看看鸟哥的菜已经吃完一半,还是略有成就感的,不过想想自己学了些什么,不知为什么也列举不出来太多。不管怎么说,现在Linux也算从零走到入门了吧,之后打算好好研究下Linux内核和Linux C编程,搞几个小项目深入下,有需要再看看系统管理什么的。废话不多说了,把今天看shell script的笔记整理出来吧。

   编写shell script的良好习惯                          

   1.文件头处记录   

  1.script的功能;

  2.script的版本;

  3.script的作者与联络方式;

  4.script的历史记录;

  5.script内较特殊的命令,最好使用“绝对路径”的方式来执行;

  6.script执行时需要的环境变量预先生命与设置。

  同时,根其他编码一样,添加适当的注释,整齐的缩进排版都是很重要的。

   2.简单的范例:   

  从Hello World开始~


  第一行:#!声明你所使用的shell名称:这个还是比较重要的,这样系统就能够加载bash的相关环境配置文件(一般来说就是non-login shell的~/.bashrc)

  #作为注释的前缀,自我觉得这注释的颜色挺好看的哈。

  在程序的开头,最好对主要的环境变量进行声明,比如PATH和LANG等是比较重要的2个,方便程序直接执行命令,而不必写绝对路径。


   shell中的变量                           

   1.变量的显示与设置:   

  echo $LANG 显示各种变量  

  1.使用等号对变量进行赋值:

  EG:name=abc  自定义变量  echo $name  输出结果:abc

  2.等号右边不能直接根空格符,且变量名称必须是英文字符与数字,不能数字开头(都比较基本啦)

  3.变量内容若又空格等字符可使用双引号“”,单引号''将变量内容结合起来:

  A.双引号中的特殊字符如$等,可以保有原本的特性:

    eg:name= "$name its me"  输出变量原来的值     echo $name 输出结果:abc its me

  B.单引号内的特殊字符作为一般文本字符原样输出:

    eg:name= ' $name its me'  原样输出'  '中的内容   echo $name 输出结果: $name its me

  4.可以使用 \ 将特殊字符转换为普通字符([Enter] $ \ 空格 !等)

  5. 增加变量内容:(读取变量值)

    eg:  name="$name"yes或者 name=${name}yes (推荐) echo $name  输出结果:abcyes

  6.若要在等号右边调用命令输出:

    eg:  version = $(命令名称)   version=$( uname -r )

  7.若需要在其他子进程中也是使用该变量,需要使用export将该变量声明为环境变量

  8.通常大写字符为系统默认变量。

  9.取消变量的方法: unset 变量名称  unset name

   2.环境变量的功能:   

  列出目前shell环境下的所有环境变量与其内容: env

  列出所有的变量(环境变量与自定义变量):set

  $(关于本shell的PID) 使用echo $就可以获得本线程的PID号码

  ?(关于上个执行命令的回传码)如果成功执行,回传0;如果执行发生错误,会回传“错误代码”

  将自定义变量声明为环境变量:export 变量名称

    影响现实结果的语系变量:

    locale (本机目前设置)locale -a (系统所支持的全部语系)

   3.变量键盘读取,数组与声明:   

  1.键盘读取:read [-pt] variable;

    -p:宁可以接提示符   eg: read -p "Please input your name" name;

    -t:接等待的秒数  eg: read -t 30 name。

  2.变量的声明: declare [-aixr] variable

    -a:将后面变量声明为数组类型;

    -i:将变量声明为整型;

    -x:将变量声明为环境变量;

    -r:将变量声明为readonly类型,该变量不可悲更改内容,也不能重设。

    变量类型默认为字符串;如果不小心把变量声明为只读,必须注销才登陆才能复原。

  3.数组的声明: var[index]=content

    eg:var[1]="small min"

         var[2]="big min"

       var[3]="nice min"

       echo "${var[1]}, ${var[2]}, ${var[3]}"

   4.变量内容的删除,替代和替换      

变量设置方式 说  明
${变量#关键字} 若变量内容从头开始的数据符合“关键字”,则将符合的最短数据删除 (删除第一个)
${变量##关键字} 若变量内容从头开始的数据符合“关键字”,则将符合的最长数据删除(剩下最后1个)
${变量%关键字} 从尾向前的数据符合“关键字”,则将符合的最短数据删除(删除第一个)
${变量%关键字} 从尾向前的数据符合“关键字”,则将符合的最长数据删除(剩下最前面的一个)
${变量/旧字符串/新字符串} 变量内容符合旧字符串,第一个旧字符串替换为新字符串
${变量//就字符串/新字符串} 变量内容符合就字符串,所有的都替换为新字符串

 

                        变量的测试与替换方式

变量设置方式 str没有设置 str为空字符串 str为非空字符串
var=${str-haha} var=haha var= var=$str
var=${str:-haha} var=haha var=haha var=$str
var=${str+haha} var= var=haha var=haha
var=${str:+haha} var= var= var=haha
var=${str=haha} var=str=haha var=str= str不变 var=$str
var=${str:=haha} var=str=haha var=str=haha str不变 var=$str
var=${str?haha} error var= var=$str
var=${str:?haha} error error var=$str

 

   5.命令别名与历史命令   

  命令别名设置:alias, unalias(很简单) 

  eg: alias name='wolegequ'      alias c='cal'

  历史命令: history [n] [-c] [-raw] histfiles

    n:列出最近的n条命令

    -c:清楚目前shell中的所有内容

    -a:将新增命令加入histfiles,若没有该文件,默认写入~/.bash_history

    -r: read  -w:write

  echo $HISTSIZE 显示history的大小

  !!执行上一条命令,!number 执行第几条命令

  #:最终命令写入histfile的问题,只有最后注销的那个bash才回写入~/.bash_history

  

 

知识共享许可协议
本作品由vortex.zhu创作

采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
基于www.cnblogs.com上的作品创作。
Permissions beyond the scope of this license may be available at http://www.cnblogs.com/VortexPiggy/.


 

原文地址:https://www.cnblogs.com/VortexPiggy/p/2444947.html