过了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=hahavar=var=$strvar=${str:-haha}var=hahavar=hahavar=$strvar=${str+haha}var=var=hahavar=hahavar=${str:+haha}var=var=var=hahavar=${str=haha}var=str=hahavar=str=str不变 var=$strvar=${str:=haha}var=str=hahavar=str=hahastr不变 var=$strvar=${str?haha}errorvar=var=$strvar=${str:?haha}errorerrorvar=$str5.命令别名与历史命令 命令别名设置: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
(以上内容不代表本站观点。) --------------------------------- |