随笔分类 -  Linux Shell

摘要:经过2个多月的努力,该系列博文到这里已经即将结束,希望该系列的文章能够给诸位今后的工作带来些许帮助,也希望能有机会与大家在技术上多多交流,互相取长补短,同时也敬请大家能够继续关注我在后面给出的关于其他技术主题的系列博文。最后在这里感谢诸位网友的支持。 言归正传,该篇博客将承接上一篇博客,进入oracle启动脚本的主体逻辑部分。#1. /etc/oratab脚本的格式如下:# MyOrcl1:/opt/oracle/product/OraHome:Y# MyOrcl2:/opt/oracle/product/OraHome:N#该文件的开头处有很多的注释说明,都是以#开头,这些注释需要在后面的. 阅读全文
posted @ 2012-01-08 07:19 OrangeAdmin 阅读(3735) 评论(0) 推荐(4) 编辑
摘要:该篇博客作为对之前Linux Shell常用技巧和高级技巧系列博客的总结,将以Oracle数据库服务器启动脚本为例,逐行进行解释和说明,以帮助我们能够更好的学习和理解Shell脚本的惯用技巧和强大之处。 Oracle的启动脚本从功能上讲主要分为两个部分,第一部分是初始化各种环境变量,以确认当前Oracle服务器的版本,从而进一步确定启动当前服务器的步骤和具体需要使用的各种Oracle工具,第二部分是基于之前判断的结果,读取当前服务器的各种配置信息,之后再通过Oracle提供的Shell命令完成数据库的启动工作。LOGMSG="logger -puser.alert -s " 阅读全文
posted @ 2012-01-06 07:21 OrangeAdmin 阅读(5302) 评论(2) 推荐(1) 编辑
摘要:为了方便我们每个人的学习,这里将给出Linux Shell高级技巧五篇系列博客的目录以供大家在需要时参阅和查找。Linux Shell高级技巧(一) http://www.cnblogs.com/stephen-liu74/archive/2011/12/22/2271167.html一、将输入信息转换为大写字符后再进行条件判断二、为调试信息设置输出级别三、判断参数是否为数字四、判断整数变量的奇偶性五、将Shell命令赋值给指定变量,以保证脚本的移植性六、获取当前时间距纪元时间(1970年1月1日)所经过的天数Linux Shell高级技巧(二) http://www.cnblogs.com. 阅读全文
posted @ 2012-01-04 07:20 OrangeAdmin 阅读(11774) 评论(2) 推荐(9) 编辑
摘要:二十五、通过FTP下载指定的文件: 相比于手工调用FTP命令下载文件,该脚本提供了更为方便的操作方式。 /> cat > test25.sh #!/bin/sh #1. 测试脚本参数数量的有效性。 if [ $# -ne 2 ]; then echo "Usage: $0 ftp://... username" >&2 exit 1 fi #2. 获取第一个参数的前六个字符,如果不是"ftp://",则视为非法FTP URL格式。这里cut的-c选项表示按照字符的方式截取第一到第六个字符。 header=`echo $1 | c 阅读全文
posted @ 2012-01-01 00:03 OrangeAdmin 阅读(8401) 评论(2) 推荐(1) 编辑
摘要:十九、将文件的输出格式化为指定的宽度: 在这个技巧中,不仅包含了如何获取和文件相关的详细信息,如行数,字符等,而且还可以让文件按照指定的宽度输出。这种应用在输出帮助信息、License相关信息时还是比较有用的。 /> cat > test19.sh #!/bin/sh #1. 这里我们将缺省宽度设置为75,如果超过该宽度,将考虑折行显示,否则直接在一行中全部打印输出。这里只是为了演示方便,事实上,你完全可以将该值作为脚本或函数的参数传入,那样你将会得到更高的灵活性。 my_width=75 #2. for循环的读取列表来自于脚本的参数。 #3. 在获取lines和char... 阅读全文
posted @ 2011-12-30 00:03 OrangeAdmin 阅读(9489) 评论(0) 推荐(4) 编辑
摘要:十三、格式化输出指定用户的当前运行进程: 在这个例子中,我们通过脚本参数的形式,将用户列表传递给该脚本,脚本在读取参数后,以树的形式将用户列表中用户的所属进程打印出来。 /> cat > test13.sh #!/bin/sh #1. 循环读取脚本参数,构造egrep可以识别的用户列表变量(基于grep的扩展正则表达式)。 #2. userlist变量尚未赋值,则直接使用第一个参数为它赋值。 #3. 如果已经赋值,且脚本参数中存在多个用户,这里需要在每个用户名之间加一个竖线,在egrep中,竖线是分割的元素之间是或的关系。 #4. shift命令向左移动一个脚本的位置参数,... 阅读全文
posted @ 2011-12-28 00:02 OrangeAdmin 阅读(6754) 评论(0) 推荐(2) 编辑
摘要:七、非直接引用变量: 在Shell中提供了三种为标准(直接)变量赋值的方式: 1. 直接赋值。 2. 存储一个命令的输出。 3. 存储某类型计算的结果。 然而这三种方式都是给已知变量名的变量赋值,如name=Stephen。但是在有些情况下,变量名本身就是动态的,需要依照运行的结果来构造变量名,之后才是为该变量赋值。这种变量被成为动态变量,或非直接变量。 /> cat > test7.sh #!/bin/sh work_dir=`pwd` #1. 由于变量名中不能存在反斜杠,因此这里需要将其替换为下划线。 #2. work_dir和file_count两个变量的变量值用于构... 阅读全文
posted @ 2011-12-26 00:03 OrangeAdmin 阅读(22881) 评论(2) 推荐(4) 编辑
摘要:该系列将重点介绍Linux Shell中的高级使用技巧,其主要面向有一定经验的Shell开发者、Linux系统管理员,以及Linux的爱好者。博客中的示例主要来源于网络和一些经典书籍,在经过本人的收集和整理之后,以系列博客的形式呈现给诸位。如果大家有更多更好的Shell脚本经典示例,且愿意在这里与我们一同分享的话,可以以邮件、博客回复等形式与我联系,我将会尽量保证该系列的持续更新。一、将输入信息转换为大写字符后再进行条件判断: 我们在读取用户的正常输入后,很有可能会将这些输入信息用于条件判断,那么在进行比较时,我们将不得不考虑这些信息的大小写匹配问题。 /> cat > test1 阅读全文
posted @ 2011-12-22 00:01 OrangeAdmin 阅读(19369) 评论(4) 推荐(8) 编辑
摘要:在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化、我们数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题。因此这段时间总结的有关Linux Shell的系列博客就给予了我极大的帮助,然而在实际的使用中却发现,有的时候确实忘记了某个技术点或某个Shell命令的使用方式曾经在哪一篇博客中予以了说明,所以不得不多次点击多篇博客,直到找到想要那篇的为止,鉴于此,为了方便我们每个人的查阅,这里特别给出了前十二篇系列博客的目录以供大家参阅和查找。Linux Shell常用技巧(一) http://www.cnblogs.com/stephen-. 阅读全文
posted @ 2011-12-20 09:36 OrangeAdmin 阅读(27504) 评论(20) 推荐(14) 编辑
摘要:二十三. Bash Shell编程: 1. 读取用户变量: read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入。在read命令后面,如果没有指定变量名,读取的数据将被自动赋值给特定的变量REPLY。下面的列表给出了read命令的常用方式:命令格式描述read answer从标准输入读取输入并赋值给变量answer。read first last从标准输入读取输入到第一个空格或者回车,将输入的第一个单词放到变量first中,并将该行其他的输入放在变量last中。read从标准输入读取一行并赋值给特定变量REPLY。read -a arrayn 阅读全文
posted @ 2011-12-19 00:05 OrangeAdmin 阅读(12578) 评论(1) 推荐(5) 编辑
摘要:二十二. 交互式使用Bash Shell: 1. 用set命令设置bash的选项: 下面为set主要选项的列表及其表述:选项名开关缩写描述allexport-a打开此开关,所有变量都自动输出给子Shell。noclobber-C防止重定向时文件被覆盖。noglob-d在路径和文件名中,关闭通配符。 #打开该选项 /> set -o allexport #等同于set -a #关闭该选项 /> set +o allexport #等同于set +a #列出当前所有选项的当前值。 /> set -o allexport off braceexpand on emacs on er 阅读全文
posted @ 2011-12-15 00:05 OrangeAdmin 阅读(15436) 评论(0) 推荐(7) 编辑
摘要:二十. 通过管道组合Shell命令获取系统运行数据: 1. 输出当前系统中占用内存最多的5条命令: #1) 通过ps命令列出当前主机正在运行的所有进程。 #2) 按照第五个字段基于数值的形式进行正常排序(由小到大)。 #3) 仅显示最后5条输出。 /> ps aux | sort -k 5n | tail -5 stephen 1861 0.2 2.0 96972 21596 ? S Nov11 2:24 nautilus stephen 1892 0.0 0.4 102108 4508 ? S<sl Nov11 0:00 /usr/bin/pulseaudio stephen 1 阅读全文
posted @ 2011-12-12 00:02 OrangeAdmin 阅读(6120) 评论(1) 推荐(2) 编辑
摘要:十九. 和系统运行进程相关的Shell命令: 1. 进程监控命令(ps): 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。 ps命令存在很多的命令行选项和参数,然而我们最为常用只有两种形式,这里先给出与它们相关的选项和参数的含义:选项说明a显示终端上的所有进程,包括其他用户的进程。u以用户为主的格式来显示程序状况。x显示所有程序,不以终端来区分。-e显示所有进 阅读全文
posted @ 2011-12-08 00:07 OrangeAdmin 阅读(6074) 评论(0) 推荐(4) 编辑
摘要:十八. 和系统运行状况相关的Shell命令: 1. Linux的实时监测命令(watch): watch 是一个非常实用的命令,可以帮你实时监测一个命令的运行结果,省得一遍又一遍的手动运行。该命令最为常用的两个选项是-d和-n,其中-n表示间隔多少秒执行一次"command",-d表示高亮发生变化的位置。下面列举几个在watch中常用的实时监视命令: /> watch -d -n 1 'who' #每隔一秒执行一次who命令,以监视服务器当前用户登录的状况 Every 1.0s: who Sat Nov 12 12:37:18 2011 stephen 阅读全文
posted @ 2011-12-05 00:07 OrangeAdmin 阅读(12619) 评论(0) 推荐(8) 编辑
摘要:十六. 文件查找命令find: 下面给出find命令的主要应用示例: /> ls -l #列出当前目录下所包含的测试文件 -rw-r--r--. 1 root root 48217 Nov 12 00:57 install.log -rw-r--r--. 1 root root 37 Nov 12 00:56 testfile.dat -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2 -rw-r--r--. 1 root root 183 Nov 11 08:02 users -rw-r--r--. 1 root root 2 阅读全文
posted @ 2011-12-01 00:06 OrangeAdmin 阅读(6712) 评论(4) 推荐(5) 编辑
摘要:十二. 行的排序命令sort: 1. sort命令行选项:选项描述-t字段之间的分隔符-f基于字符排序时忽略大小写-k定义排序的域字段,或者是基于域字段的部分数据进行排序-m将已排序的输入文件,合并为一个排序后的输出数据流-n以整数类型比较字段-o outfile将输出写到指定的文件-r倒置排序的顺序为由大到小,正常排序为由小到大-u只有唯一的记录,丢弃所有具有相同键值的记录-b忽略前面的空格 2. sort使用实例: 提示:在下面的输出结果中红色标注的为第一排序字段,后面的依次为紫、绿。 /> sed -n '1,5p' /etc/passwd > users / 阅读全文
posted @ 2011-11-28 07:12 OrangeAdmin 阅读(6051) 评论(5) 推荐(2) 编辑
摘要:十一. awk编程: 1. 变量:在awk中变量无须定义即可使用,变量在赋值时即已经完成了定义。变量的类型可以是数字、字符串。根据使用的不同,未初始化变量的值为0或空白字符串" ",这主要取决于变量应用的上下文。下面为变量的赋值负号列表:符号含义等价形式=a = 5a = 5+=a = a + 5a += 5-=a = a - 5a -= 5*=a = a * 5a *= 5/=a = a / 5a /= 5%=a = a % 5a %= 5^=a = a ^ 5a ^= 5 /> awk '$1 ~ /Tom/ {Wage = $2 * $3; print 阅读全文
posted @ 2011-11-24 07:34 OrangeAdmin 阅读(7410) 评论(1) 推荐(5) 编辑
摘要:九. awk实用功能: 和sed一样,awk也是逐行扫描文件的,从第一行到最后一行,寻找匹配特定模板的行,并在这些行上运行“选择”动作。如果一个模板没有指定动作,这些匹配的行就被显示在屏幕上。如果一个动作没有模板,所有被动作指定的行都被处理。 1. awk的基本格式: /> awk 'pattern' filename /> awk '{action}' filename /> awk 'pattern {action}' filename 具体应用方式分别见如下三个用例: /> cat employees Tom Jon 阅读全文
posted @ 2011-11-21 06:48 OrangeAdmin 阅读(8163) 评论(3) 推荐(6) 编辑
摘要:八. 流编辑器sed: sed一次处理一行文件并把输出送往屏幕。sed把当前处理的行存储在临时缓冲区中,称为模式空间(pattern space)。一旦sed完成对模式空间中的行的处理,模式空间中的行就被送往屏幕。行被处理完成之后,就被移出模式空间,程序接着读入下一行,处理,显示,移出......文件输入的最后一行被处理完以后sed结束。通过存储每一行在临时缓冲区,然后在缓冲区中操作该行,保证了原始文件不会被破坏。 1. sed的命令和选项:命令功能描述a\在当前行的后面加入一行或者文本。c\用新的文本改变或者替代本行的文本。d从pattern space位置删除行。i\在当前行的上面插入文. 阅读全文
posted @ 2011-11-17 06:56 OrangeAdmin 阅读(11068) 评论(5) 推荐(5) 编辑
摘要:七. grep家族: 1. grep退出状态: 0: 表示成功; 1: 表示在所提供的文件无法找到匹配的pattern; 2: 表示参数中提供的文件不存在。 见如下示例: /> grep 'root' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin /> echo $? 0 /> grep 'root1' /etc/passwd #用户root1并不存在 /> echo $? 1 /> grep ' 阅读全文
posted @ 2011-11-14 06:51 OrangeAdmin 阅读(10753) 评论(4) 推荐(2) 编辑