Shell脚本学习指南摘录---1

1、数字与数值表达式

awk并没有提供字符串转数字的函数,不过awk的做法很简单:只要加个零到字符串里边,例如s = “123”,接着n = 0 + s,便将数字123赋给n了。

2、打印前几行的方式

head -n n filename

# head -n 3 passwd

head -n filename

# head -3 passwd

awk 'FNR <= n' filename

# awk 'FNR <= 3' passwd

sed -e nq filename

# sed -e 3q passwd

sed nq

# sed 3q passwd

3、限制临时性文件只能我们可以访问

umask 077 filename

mask: 新建文件、目录的默认权限是由mask决定的

umask: 会影响到mask,umask表示要减掉的权限

代表rwx------,表示owner拥有任何权限,group和other没有完全的操作权限

4、正则

# echo "jones:Adrian W. Jones/OSD211/555-0123" | sed -e 's=^\([^:]*\):[^/]*/\([^/]*\)/.*$=\1:\2='

jones:OSD211

^\([^:]*\)匹配用户名jones

[^/]*/匹配Adrian W. Jones

\([^/]*\)匹配OSD211

.*匹配$555-0123

\1:\2匹配前面()括起来的两组

# echo "jones:Adrian W. Jones/OSD211/555-0123" | sed -e 's=^\([^:]*\):[^/]*/[^/]*/\([^/]*\)=\1:\2='

jones:555-0123

5、变量赋值与环境

5.1、readonly和export

两个相似的命令提供变脸的管理,一个是readonly,它可以使变量成为只读模式;而赋值给它们是被禁止的。在Shell程序中,这是创建符号常量的一个好方法。

hour_per_day=24 赋值

readonly hour_per_day 设为只读模式

export,readonly

用途:

export用于修改或打印环境变量,readonly则使得变量不得修改。

较为常见的是export,其用法是将变量放进环境(environment)里。环境是一个名称与值的简单列表。可供所有执行中的程序使用。新的进程会从其父进程继承环境,也可以再建立新的子进程之前修改它。export命令可以将新变量添加到环境中:

PATH=$PATH:/usr/local/bin 更新PATH

export PATH 导出它

简单化也可以写成这样的:

export PATH=$PATH:/usr/local/bin

export -p 显示当前的环境

export命令仅将变量加到环境中,如果你要从程序的环境变量中删除变量,则要用env命令,env命令也可以临时的改变换进变量值:

env -i PATH=$PATH HOME=$HOME LC_ALL=C awk '...' file1 file2

-i 选项是用来初始化环境变量的;也就是丢弃任何的继承值,仅传递命令行上指定的变量给程序使用。

5.2、unset

unset命令从执行中的Shell中删除变量和函数。默认情况下,它会解除变量设置,也可以加上-v来完成:

unset full_name 删除变量full_name

unset -v first middle last 删除其他变量

使用-f删除函数

who_is_on () { 定义函数

who | awk '{print $1}' | sort -u 产生排序后的用户列表

}

...

unset -f who_is_on 删除函数

5.3、赋值为null和删除变量

myvar=赋值并不会将myvar删除,只不过是将其设为null字符串。相对的:unset myvar则会完全的删除它。

5.4、参数展开

参数展开(parameter expansion)是shell提供变量值在程序中使用的过程。

在shell下,更复杂的形式可用于更特殊的情况。这些形式都是将变量名称括号在花括号里(${variable}),然后再增加额外的语法以告诉shell该做些什么。当你需要在变量名称之后马上跟一个可能会解释为名称的一部分的字符时,就会用到花括号了:

reminder="Time to go to the dentist!" 将值存储在reminder中

sleep 120 等待两分钟

echo _${reminder}_ 加上下划线符号强调现实的信息

警告:

默认情况下,未定义的变量会展开为null(空的)字符串。程序随便乱写,就可能会导致灾难发生:

rm -rf /$MYPROGRAM 如果未设置MTPROGRAM,就会导致大灾难!

所以写程序一定要很小心!

6、算数运算

i++与++i

# i=5

# echo $((i++)) $i

5 6

# echo $((++i)) $i

7 7

怎么会出现结果不同的情况呢?都是i的值加1,但是运算符返回的值会根据它与变量的相对位置而定。后缀式(postfix)的运算符(运算符出现在变量之后),在结果产生后,将旧值返回给变量,再执行变量加1的操作。相对的,前缀式(prefix)中,运算数则是放在变量的前面,先将变量加1,再返回新值给变量,--的工作方式和++类似,只不过它的操作是将变量减1。

7、退出状态

每一台命令退出都会返回一个小的整数值给引用它的程序,这就是大家熟知的退出状态(exit statu)。

7.1、退出状态值

退出状态为0表示“成功”,其他任何的退出状态都为失败。

内置变量?(以$?访问它)包括了Shell最近一次所执行的一个程序的退出状态。

7.2、POSIX的结束状态

值 意义

0 命令成功的退出

>0 在重定向或单词展开期间(~、变量、命令、算数展开,以及单词切割)失败

1-125 命令不成功的退出。特定的退出值得含义,是由各个单独的命令定义的。

126 命令找不到了,但文件无法执行。

127 命令找不到

>128 命令因受到信号而死亡

原文地址:http://blog.51cto.com/xiaoxiaozhou/2128872

时间: 2024-10-17 15:15:50

Shell脚本学习指南摘录---1的相关文章

笔记——shell脚本学习指南

<shell脚本学习指南>机械工业出版 ISBN 987-7-111-25504-8 第2章 2.4 初级陷阱 1.当今的系统,对#!这一行的长度限制从63到1024个字符都有,尽量不要超过64个字符. 2.在某些系统上,命令行部分包含了命令的完整路径名称.不过有些系统却不是这样:命令行的部分会原封不动地传递给被引用的程序. 3.别在选项之后放置任何空白,因为空白也会跟着选项一起传递给被引用的程序. 4.你需要知道解释其的完整路径名称.这可以用来规避可移植问题,因为不同的厂商可能将同样的东西放

shell脚本学习指南

以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bash shell 脚本的第一行,#!之后应该是什么? 如果拿这个问题去问别人,不同的人的回答可能各不相同.我见过/usr/bin/env bash,也见过/bin/bash,还有/usr/bin/bash,还有/bin/sh,还有/usr/bin/env sh.这算是编程界的“’茴’字四种写法”了. 在多数情况下,以上五种写法都是等价的.但是,写过程序的人都知道:“少数情况”里往往隐藏

Shell脚本学习指南 [ 第三、四章 ] 查找与替换、文本处理工具

摘要:第三章讨论的是编写Shell脚本时经常用到的两个基本操作.第四章总共介绍了约30种处理文本文件的好用工具. 第三章 查找与替换 概括:本章讨论的是编写Shell脚本时经常用到的两个基本操作:文本查找.文本替换. 3.1  查找文本 如需从输入的数据文件中取出特定的文本行,主要的工具为grep程序.POSIX采用三种不同grep变体:grep.egrep.fgrep整合为单个版本,通过不同的选项,分别提供这三种行为模式.who | grep -F root上面使用-F选项,以查找固定字符串r

perl脚本学习指南-简略笔记

最近在实习,看着公司有些脚本是perl写,久闻perl处理文本还是很强大的,趁着周末扫了一般这本书~记录下了~ undef 默认未定义字符,perl里面没有NULL,defined($x)函数:如果参数为undef返回false qw(cs phy geo) 类似于 ("cs", "phy", "geo")列表可以赋值给数组@array 数组操作符:pop,push操作末尾,shift,unshift操作开头,reverse逆序,@array =

shell脚本学习与总结

shell脚本学习总结,东西很多,供初学者参考. shell脚本是区分大小写的. 2.Unix特殊字符有: ( ; $ ? & * () [] ` ' " + 使用其时要进行转义() 3.Shell的注释以#开头 4.函数的定义Function fuction_name(){ Command to execute} 调用时直接用function_name. 5.控制结构 1)If...then语句 If [ test_command ]    Then    Commandsfi2)If

shell脚本学习笔记系列--1

一.学好shell编程的知识储备 1.相关Linux系统命令应用: 2.Vi/vim 编辑器的熟练使用,相关客户端软件的设置: 3.基础的服务,系统服务ntp,crond,网络服务:nfs,rsync,inotify,sersync,ssh,lanmp等. 补充:清空日志的三种方法: 1)echo  " " > filename.log 2)>filename.log 3)cat  /dev/null > filename.log 注:工作中有的时候不能删除(日志)文

shell脚本学习笔记:通过shell实现linux用户管理和监控

学习shell做的第一个脚本,感谢云知梦李强强老师的shell编程教程 创建shell脚本文件: touch menu.sh touch index.sh touch welcome.sh 赋予脚本文件可执行权限: chmod a+x menu.sh index.sh welcome.sh menu.sh #!/bin/bash #menu.sh function menu(){ title="My Home" name="Randy" time=`date +%Y

shell脚本学习笔记 (sed的高级用法----模式空间和保持空间)

前段时间在学习shell脚本,上次有提到sed的模式空间和保持空间概念,但是一直没有研究好,这两天研究了一下,所以将它发出来,不是很全面,仅仅供大家参考一下. 保持空间sed在正常情况下,将处理的行读入模式空间,脚本中的"sed command(sed命令)"就一条接着一条进行处理,直到脚本执行完毕.然后该行被输出,模式被清空:接着,在重复执行刚才的动作,文件中的新的一行被读入,直到文件处理完毕. 模式空间可以比喻为一个生产线,而保持空间则可以被比喻为仓库,这个比喻希望可以帮助大家理解

shell 脚本学习

距离上一次写东西又隔了一段时间了,期间一直跟着私房菜学习,还是没养成定期做记录的习惯,今天就来写第一个脚本的编写吧. 经过几天的积累,学习了下shell脚本的编写,目前掌握的还不太成熟,凡事从小入手肯定是没错的,先写个简单的吧(难的也不会写o(╯□╰)o). 这个脚本的执行方法,就是输入生日来计算当前日期距离生日还有多少天,如果已经过完生日则计算来年生日的时间. #!/bin/bash #Program: #    Calculate how long it takes to have a bi