shell 脚本

Linux系统下find命令递归删除查找目录的方法

本文将会讲述如何使用linux系统下的find查找命令来查找目录或文件,并将查找到的所有文件和目录递归删除掉。 Linux find 命令递归删除非空目录 通常情况下我们会想到find命令里的删除操作是使用-delete选项,但是使用该选项只能删除空目录的文件,不能递归删除该目录里的其它文件。如下面的例子: $ ls dir1 test1 $ find ./ -name “dir1” -type d -delete find: cannot delete `./dir1′: Directory not empty 可以使用下面的Linux find 命令删除非空目录,如: $ find ./ -name “dir1” -type d -exec rm… read more »

Linux系统下通过bash shell脚本实现倒计时的方法

本文主要讲述如何在linux系统下通过bash shell 脚本来实现在屏幕上输出倒计时的方法。 先来看看实现后的脚本,如下: #!/bin/bash # script name: ctimer.sh # Author: osetc.com # ——————————————————– row=2 col=2 countdown() { msg=”starting…” clear tput cup $row $col echo -n “$msg” l=${#msg} l=$(( l+$col )) for i in {30..1}… read more »

Linux系统下批量升级LXD容器里的虚拟机的方法

本文将会讲述如何在linux 系统下自动升级LXD容器里的所有的虚拟机。 下面我们通过两种方法实现自动升级所有虚拟机: 方法一:使用shell 脚本来升级 手动的升级命令是: /usr/bin/lxc exec 虚拟机名 — /usr/bin/apt-get -y upgrade (ubuntu系统) /usr/bin/lxcexec 虚拟机名  — /usr/bin/yum -y update    (centos 系统) 下面来创建bash shell 脚本来自动升级所有的虚拟机: #!/bin/bash #脚本名:vmUpgrade.sh #——————————– cmd=”[email protected]”for i in 虚机1 虚机2 虚机3 虚机4… read more »

Linux系统下删除包含特定字符或数字的方法

本文将会讲述如何在linux 系统下通过删除rm命令来删除包含特定字符或数字的方法。本文主要针对linux初学者。 在linux下面删除文件或目录的命令是rm, 如果想删除特定模式的文件或者目录,那么就需要使用linux命令中特有的通配符。 比如下面的几个通配符模式: * : 可以匹配任意字符串 *b*: 可以匹配包含字符”b”的任意字符串 *2*: 可以匹配包含数字”2”的任意字符串 *.[ab]: 可以匹配任意以字母a 或b 结尾的字符串 *[cd]*:可以匹配包含字母‘c’或 ‘d’的任意字符串 ?: 可以匹配任意一个单一字符 实例: 显示出当前目录下所有的以包含test 的文件 $ ls *test* test2  test30  test5 显示以数字1结尾的文件 $ ls *1 text1 显示所有以“test”开头的文件… read more »

shell:BASH 的目录切换

By WEN Pingbo ofTinyLab.org 2015/06/02 在 BASH 中你用的最多的命令是什么?这绝对非 cd 莫属(ls 也是个潜力股,暂时做老二吧)。所以在这篇文章中,我们聊聊如何高效的在 BASH 中切换目录。 目录 1 往后切换目录 2 往前切换目录 2.1 CDPATH 2.2 CDSPELL 3 目录堆栈 4 模拟 Windows Explorer (icd) 往后切换目录 回退目录,正规的做法是 cd ..。但网上的小伙伴很有才,发明了更简洁实用的命令。这里把它搬过来,其实我自己也一直这么用的: alias ..=’cd… read more »

BASH 的调试手段

By WEN Pingbo ofTinyLab.org 2015/06/01 平时在写 BASH 脚本时,总是会碰到让人抓狂的 BUG。和 C/C++ 这么丰富的调试工具相比,BASH 又有什么调试手段呢? 目录 1 echo/print (普通技) 2 set -x (稀有技) 3 trap/bashdb (史诗技) echo/print (普通技) 打印一些变量,或者提示信息。这应该是一个通用的方法了。在 BASH 里,我们可以简单的用 echo,或者 print 来输出一些 log,或者加一些 loglevel 来过滤一些 log。这里贴一下我平常用的函数:… read more »

Nginx服务启动、停止和重启等操作的SHELL脚本

由于使用源码编译安装Nginx,不会像yum install那样自动生成Nginx服务控制脚本,所以需要自己添加一个操作脚本。谷歌上搜了一下,shell脚本的代码基本类似,因此自己稍微整理改动了下。 下面的shell脚本内容,需要根据Nginx实际编译安装的配置,修改 NGINX_CONF_FILE=”/etc/nginx/nginx.conf>”和 lockfile=/var/lock/nginx.lock这两个参数(即前文 《2015博客升级记(三):CentOS 7.1编译安装Nginx1.9.0》中的configure配置)。 将上面的shell脚本内容以 Unix格式(不能用dos哦)保存并命名为 nginx,然后上传到centos系统的 /etc/init.d/目录,接着添加可执行权限,最后执行添加到开机启动的命令: chkconfig –add nginx、 chkconfig nginx on即可。 最后,我们可以使用如下命令对Nginx服务进行操作: 原文:http://typecodes.com/web/nginxserviceoptshell.html

Linux Shell 程序调试

Linux Shell程序调试 Shell程序的调试是通过运行程序时加入相关调试选项或在脚本程序中加入相关语句,让shell程序在执行过程中显示出一些可供参考的“调试信息”。当然,用户也可以在shell程序中的适当位置加入一些echo命令用于调试与跟踪。 方法一:在运行脚本程序时加入调试选项: 【用法】bash –选项./shellScript.sh 几个常用的调试选择项如下: 方法二:在脚本程序中通过 set命令 调试程序: 【用法】set –选项,set +选项      #set命令的常用选项同上 (1)未置变量退出(-u)和立即退出(-e) 未置变量退出特性允许用户对所有变量进行检查,如果引用了一个未赋值的变量就终止Shell程序的执行。Shell通常允许未置变量的使用,在这种情况下,变量的值为空。如果设置了未置变量退出选择项,则一旦使用了未置变量就显示错误信息,并终止程序的运行。未置变量退出选择项为-u。 当Shell运行时,若遇到不存在或不可执行的命令、重定向失败或命令非正常结束等情况时,如果未经重新定向,该出错信息会显示在终端屏幕上, 而Shell程序仍将继续执行。要想在错误发生时迫使Shell程序立即结束,可以使用-e选项将Shell程序的执行立即终止。 (2)Shell程序的跟踪(-v或-x) 调试Shell程序的主要方法是利用Shell命令解释程序的-v或-x选项来跟踪程序的执行。-v选择项使Shell在执行程序的过程中,把它读入的每一个命令行都显示出来,而-x选择项使Shell在执行程序的过程中把它执行的每一个命令在行首用一个+加上命令名显示出来。并把每一个变量和该变量所取的值也显示出来。因此,它们的主要区别在于:在执行命令行之前无-v,则显示出命令行的原始内容,而有-v时则显示出经过替换后的命令行的内容。 【例子】 ./iftest.sh: 方法一运行结果: bash -v ./iftest.sh bash -x ./iftest.sh 注:$#=1    $1=..   方法二运行结果:   取消iftest.sh程序中的注释,并且只选择set -x… read more »

linux shell exit

常用参数 格式:exit n 退出。设置退出码为n。(Cause the shell to exit with a status of n.) 原文:http://www.0550go.com/script/shell/linux-shell-exit.html

shell: [原]shell终端多目录间快速cd工具

1.解决的问题 当在多个目录间cd的时候,需要输入一大串的路径。例如在不同的项目、不同的分支代码目录跳转,在桌面和文档目录跳转 cd ~/Desktop/project_trunk cd ~/Download/cang_lao_shi cd ~/code/branch-1.11/ cd ~/code/branch-3.1/project/android  这个工具就能令这些cd简化成几个字符: g2t g2c g21 g2a 2.脚本配置 工具是个shell脚本,附在本文末尾,复制整个代码保存为任意文件名,例如g2.sh,然后在 ~/.bashrc的最后一行加入单引号里的内容 ‘source g2.sh’ 或 ‘. g2.sh’ 3.自定义路径 如果想加入自定义的路径,找到 shortcut_and_paths=(xxxxx) 的地方,增加一行就可以了。每行就是一个参数和实际命令。可以看到 第一个空格前是g2的后缀,第一个空格后是cd的路径。增加完需要重新source或者新建一个terminal才会生效。 如果忘了可以g2啥,可以输入g2help(不是g2hell哦)就能列出所有命令。 附脚本: FAQ: 为什么不用alias呢?因为非交互式shell不会展开alias,也就是用function就能被其它脚本调用了 转载请注明出处: http://blog.csdn.net/hursing 原文:http://blog.csdn.net/hursing/article/details/44098161

shell: [Linux] LNMP环境的搭建

LNMP 是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写: Linux :一种自由和开放源码的类UNIX操作系统 Nginx :一个轻量级网页服务器、反向代理服务器 M ariaDB 或 M ySQL :数据库服务器 P HP 、 P erl 或 P ython :脚本语言 这篇文章介绍如何在 CentOS 7 (x64) 上搭建 LNMP 环境,当然有些部分可能在其它系统上处理起来有些不同,但是大体上各个 Linux 系统的搭建过程都是类似的 首先是安装一些必要的包,以保证 nginx 的编译及运行顺利 Shell 然后到官网下载最新版的… read more »

shell: HBase Shell 常用操作

HBase Shell是HBase的一个命令行工具,我们可以通过它对HBase进行维护操作。我们可以使用sudo -u hbase hbase shell来进入HBase shell。在HBase shell中,可以使用status, version和whoami分别获得当前服务的状态、版本、登录用户和验证方式。 HBase shell中的帮助命令非常强大,使用help获得全部命令的列表,使用help ‘command_name’获得某一个命令的详细信息。例如: 1. 命名空间 在HBase系统中,命名空间namespace指的是一个HBase表的逻辑分组,同一个命名空间中的表有类似的用途,也用于配额和权限等设置进行安全管控。 HBase默认定义了两个系统内置的预定义命名空间: • hbase:系统命名空间,用于包含hbase的内部表 • default:所有未指定命名空间的表都自动进入该命名空间 我们可以通过create_namespace命令来建立命名空间 > create_namespace ‘debugo_ns’ 0 row(s) in 2.0910 seconds 通过drop_namespace来删除命名空间 > drop_namespace ‘debugo_ns’ 0 row(s)… read more »

shell: Linux shell批量删除指定目录下的所有目录的编程思路

应用场景:某个目录中存放着许多软件的源码压缩包,在部署完这些软件后,一定会生成许多没用的临时目录,可以通过脚本的方式删除该目录下所有的目录。当这个目录中存在着一些特殊名字的目录时,例如这些目录中有Linux系统所不支持的特殊字符“/”(这些文件通常有可能是Windows系统所支持的)或有目录名中有空格,那批量删除这些目录就会变得困难。 问题分析与解决办法: 问题1.当前工作目录中有一些重要的目录可能不想被删除 解决办法:排除这些目录即可 问题2.需要考虑一些特殊的目录名称,诸如“test dir”,“2015/03/11-log”,“下载” 解决办法:利用inode消除用户命名空间所带来的特殊性 背景知识: inode是index node或information node的缩写,是一种特殊的结构用于存放文件的基本信息,这些信息包括文件的所有者、类型、访问权限和存放在磁盘中实际数据的位置。inode存放在每一个文件系统的inode表(inode table)中。 Index or Information Node. This is a structure containing the basic information about a file such as owner, type, access permissions and pointers… read more »

shell: CentOS6、7 LVM逻辑卷分区自动扩容Shell脚本编程思路与实例

应用场景和已知存在的问题: 适用于CentOS6或CentOS7(可能适用于CentOS4或5等早些版本) 根文件系统(被扩展的文件系统)采用LVM进行管理,例如mount命令输出“/dev/mapper/vg_$hostname-lv_root on / type ext4 (rw)”中含有“mapper”关键词 自动扩容根文件系统,如果想扩展其他文件系统,例如有的业务应用数据目录不在根分区中,则需要修改Shell脚本代码中的VG_PATH_TO_EXTEND变量(约78行)。 仅支持ext2、ext3、ext4、xfs等分区格式的文件系统 可能不支持某些过多自定义的CentOS系统,但核心步骤相似 脚本中仅添加了scsi磁盘支持,如需要管理其他磁盘,则需要自己扩充脚本 为了简化脚本,避免执行多次(本程序没有写执行锁),先前已经存在的磁盘名已经设定为sda,见Shell脚本代码中第45行的ONLINE_SCSI_DISK_PRESENT变量 考虑点: 由于CentOS6和CentOS7在默认根文件系统的文件系统格式存在差异,需要判断是否为xfs,如果是xfs则应该使用xfs_growfs而不是一味的使用resize2fs。 使用resize2fs扩展ext2、ext3、ext4格式的文件系统,使用xfs_growfs扩展xfs格式的文件系统 同一脚本在同一系统多次被执行可能引发的错误,可以考虑使用文件锁来解决这个问题 编程思路: (之前应该准备或检查Shell脚本运行环境)获取当前使用中的块设备文件名 获取新添加scsi磁盘的文件名 获取LVM卷组名(vg)、将被扩展的卷组名的文件路径 将新添加磁盘使用fdisk创建分区并格式化为LVM格式 创建物理卷,pvcreate 扩展卷组,vgextend 调节逻辑卷大小,lvresize 判断是否是xfs文件系统 同步文件系统,使得扩容生效 返回系统磁盘使用情况 Shell代码: 测试结果: (1)添加磁盘前: (2)添加磁盘并执行脚本后: 由此可见根分区已经由原先的36GB变为52GB,表示LVM扩容成功。 –END– 原文:http://dgd2010.blog.51cto.com/1539422/1619692

shell: shell脚本生成xml文件

今天把这段时间学习完shell后完成工作上的一个小案件整理了一下,分享给大家! 说来也巧了,作为一个刚刚毕业半年的菜鸟,进入公司后,听公司的大牛推荐学习linux–”鸟哥的私房菜“,基本上是从去年8月份开始到了今年的1月份,基本上是把基础篇看完了,开始了解shell脚本的相关知识。刚好公司有了一个shell脚本的案件给我了,时间上也没有多紧。然后就一边学习一边开始做,虽然中途客户反映先前的业务逻辑有问题耽搁了两周,但总算是到最后完成了,自己学习的东西能用到很开心,今天闲了,把代码整理了一下,分享给大家 具体是这样: 要求是写一个shell脚本,安装要求查询数据,将符合条件的数据按照客户给定的xml样式进行组装,然后加入到crontab中,定时执行通过scp或者ftp放到客户服务器上。 具体实现步骤: 一、编写生成xml文档的代码 网上搜索了一篇博客:http://blog.csdn.net/dengzhaoqun/article/details/7262271   拿来学习了一下,感觉好用,自己就根据自己的实际情况修改了一下: 这里有一些基础知识: 关于参数: 假如有下面这个脚本执行的命令 /path/to/scriptname opt1 opt2 opt3 opt4 1 $0 : 的值是默认是脚本的名字,从$1 -$4 开始就是参数的值 2 $# :代表后接的参数『个数』 3 [email protected] :代表『 ” $1 >” ” $2 >” ”… read more »

shell: 提高Linux工作效率的十大bash技巧

来自: 程序师 链接:http://www.techug.com/ten-tips-for-wonderful-bash-productivity 我喜欢钻研bash环境。很多时候,在使用bash编程中,有些问题一遍又一遍的重复遇到。每次我都需要重新思考这些问题的解决方法。直到有一天我无法忍受,于是坐下来,编写一个通用的函数,放入我的.bashrc文件中,部署到电脑上。 希望我的这些追求最大化命令行效率的努力成果也能给其他喜欢使用bash的朋友们带来一些帮助。我更大的期望是我的这种行为能引起其他朋友的互动——给我提建议、提出更好的bash技巧,请在文后留言讨论,或在 @程序师视野 给我留言。 别的不多说了,下面就是我的总结。 技巧一、用命令行往文件的顶部添加文字 每次我都会重新寻找这个命令的写法。下面就是如何使用sed往一个文件顶部添加一行的方法: sed -i ‘1s/^/line to insertn/’ path/to/file/you/want/to/change.txt 技巧二、用命令行往配置文件里插入多行文本 这种方法非常简单,很多人都知道,下面就是如何用命令行将(>>)多行文本插入一个文件中。这里使用的是“here document”语法,它能让你通过块文本符号来将段落插入文件中,通常用的符合是EOF(意思是 “End Of File”): cat >> path/to/file/to/append-to.txt

shell: Bash内部变量

Bash内部变量 有些内部命令在目录列表时是看不见的,他们有Shell本身提供,常见的内部命令:echo,eval,execexport,readonly,read,shift ,wait,exit和点(.) echo 变量名表 将变量名表指定的变量显示到标准输出 Evalargs 读入参数args ,并将他们组合成一个新的命令,然后执行 Exec命令参数 当Shell执行到exec语句时,不会去创建新的子进程,而是转去执行新的命令,当指定的命令执行完时,该进程(也就是当初的Shell)就终止了,所以Shell程序中的exec后面的语句将不再被执行 Export 变量名=value Shell 可以用export把它的变量向下打入子Shell,从而让子进程继承父进程中的环境变量,但子Shell不能用export把他的变量向上带入父Shell Readonly 变量名 从边准输入读字符床,传给指定变量 Shift 语句 Shift 语句按如下方式重新命名所有的位置参数变量,即 $2成为$1,$3成为$2…在程序中每使用一次shift语句,都使得所有的位置一次向左移动一个位置,并使位置参数$#减1,直到减到0为止。 ssh-copy-id  –I  pub Vi /usr/bin/ssh-copy-id 举例: if [ “-i>” = “$1>” ];then… read more »

shell: 深入理解 bash redirection 重定向

stdout redirection 参考文档 stderr to stdout 0 是 stdin 1 是 stdout 2 是 stderr ➜ ./find.sh 2>&1 > find1.log ➜ ./find.sh > find2.log 2>&1 这里分析的关键是:一步一步分析,分析一步,输出一步 第一种情况: 2>&1: 将stderr定向到stdout, 原本stdout就是要到屏幕的,所以stderr会输出到屏幕 >find1.log: 将stdout 再重定向到文件 第二种情况: >find2.log:… read more »

shell: 经典的Fork炸弹

Jaromil在2002年设计了最为精简的一个Linux Fork炸弹,整个代码只有13个字符,在shell中运行后几秒后系统就会宕机: :() { :|:& };: 这样看起来不是很好理解,我们可以更改下格式: :() { :|:& }; : 更好理解一点的话就是这样: bomb() { bomb|bomb& }; : 因为shell中函数可以省略 function关键字,所以上面的十三个字符是功能是定义一个函数与调用这个函数,函数的名称为 :,主要的核心代码是 :|:&,可以看出这是一个函数本身的递归调用,通过 &实现在后台开启新进程运行,通过管道实现进程呈几何形式增长,最后再通过 :来调用函数引爆炸弹.因此,几秒钟系统就会因为处理不过来太多的进程而死机,解决的唯一办法就是重启。 Bomb一下 秉着不作不死的心态,我们也来运行一下,于是我将矛头指向云主机,,我使用了国内的一个2G内存的云主机,首先在本地开启两个终端,在一个终端连接云主机后运行炸弹,几秒后再尝试用另外一个终端登录,效果可以看下面Gif图: 看,运行一段时间后直接报出了 -bash: fork: Cannot allocate memory,说明内存不足了。并且我在二号终端上尝试连接也没有任何反应。因为是虚拟的云主机,所以我只能通过主机服务商的后台来给主机断电重启。然后才能重新登录: 炸弹危害 Fork炸弹带来的后果就是耗尽服务器资源,使服务器不能正常的对外提供服务,也就是常说的DoS(Denial of… read more »

shell: bashrc not work

今天想 在 .bashrc 中配置一段自动启动 ssh-agent 的脚本,结果总是没有自动运行;才发现我的 bashrc 脚本没有自动 加载 后来才发现是这次装的深度系统(deepin)默认没有 ~.profile脚本, 去看看之前的ubuntu系统里面都默认是有这个脚本的,而 ~.bashrc脚本则是通过 .profile 来加载的 如果新建一个用户, 在其 $HOME 目录下会自动创建 .profile 脚本吗? 1. linux系统加载bash配置脚本的顺序 .bashrc 文件本身在 *nix 系统下就不会自动加载,一般都是通过 .profile 间接加载的 一般,系统会按下面的顺序加载 /etc/profile ~/.bash_profile ~/.bash_login ~/.profile 如果你的… read more »

shell: 【应用】:shell crontab定时生成oracle表的数据到txt文件,并上传到ftp

一、本人环境描述 1、oracle服务端装在win7 32位上,oracle版本为10.2.0.1.0 2、Linux为centos6.5 32位,安装在Oracle VM VirtualBox虚拟机上 3、win7上装有ftp服务 二、功能实现描述用shell的crontab命令定时执行某个.sh文件,此文件的功能已实现生成oracle表的数据到本地txt文件,并上传到ftp,必要时可记录执行日志。 三、步骤 1、 在centos中安装oracle客户端并配置环境变量 2、 在centos中安装ftp客户端 3、 编写shell,实现查询oracle数据库表,并写到本地txt文件 4、 编写shell,实现上传文件到ftp 5、修改shell,打印执行日志 打印日志函数如下: View Code 6、所有shell代码 数据表结构见【 编写shell,实现查询oracle数据库表,并写到本地txt文件】 A、把打印日志函数封装成testLog.sh,代码如下: View Code B、通过ftp上传文件代码封装成testFtptool.sh,如下: View Code 注意目录结构,修改相关参数,运行./testStudent.sh即可 测试结果如下: 7、crontab命令实现定时任务 crontab… read more »

shell: shell grep正则匹配汉字

Shell grep正则匹配中文 测试文本 demo_exe.c,内容如下,需要注意保存的编码格式,对输出到终端有影响: 我们中文操作系统ASNI默认是GBK的。 1、匹配特定文字: $ grep -nP “xE4xB8xADxE6x96x87|xD6xD0xCExC4>” ./demo_exe.c 12:// 这个是中文 15:// 这个是中文 22:// 中文 编码 中 文 在线码表 GBK D6D0 CEC4 http://www.lhelper.org/tech/chinese_internal_code_specification_classified.txt Unicode 4E2D 6587 UTF-8 %E4%B8%AD %E6%96%87 http://wenku.baidu.com/link?url=DfbzjKLcRaQ7yVIA_EHVP7mKdVbkggq4hwkCmmO9uR76Jib_5Y1Y_h616NnI21XY_x85YZqN1SQBAdCFQjklS_ GBK码 : 中=D6D0,文=CEC4 Unicode码:中=4E2D,文=6587 UTF-8码:中=%E4%B8%AD,文=%E6%96%87… read more »

shell: Shell或命令行计算数组或文件的行数和列数

(一)闲聊Linux Shell 编程 都说中国文化博大精深(例如汉字),但作为操作系统中的佼佼者,Linux虽然时间并不长,但同样也是博大精深。谁也不敢说自己已经熟练的掌握了Linux中所有的内容,除了知识点众多以外,快速的发展和更新使得Linux越来越强大,也使得Linux在短时间内越来越难掌握。所以说,知识真是一个积累的过程,但有时候脑袋还真记不住,比如Linux Bash里面的变量替换、Bash变量展开等,如果感觉自己进展不顺利就赶紧用笔记吧。 学过Java、php、python、shell等再回来学C,发现C真的是很难。难点在哪?感觉拿到C以后真的无从下手,作为Java来说,极好的IDE、完善的文档和众多的学习人数使得获取Java帮助并不难。对于php、python、shell等脚本语言来说,丰富的函数库介绍和帮助系统对于英语熟练的人来说非常简单。而作为C这一古老的语言,要想查看它的函数库和帮助系统,可能是自己还没有真正的认识C,正因如此我颇感到有心无力。 回过头来再说Shell,Bash Shell在Linux系统管理和维护中往往发挥出巨大的作用,系统管理、自动化、监控报警、计划任务等样样精通。几乎在Linux下能想到的功能,甚至系统函数中的功能,都有Linux命令与之对应,Linux命令的强大使得Shell也变得强大。Shell本身也是程序,有人说程序=算法+数据结构,但对于Shell而言,程序=算法+命令,因为Shell 是解释型语言,它的变量都是弱类型(Java、C等都是强制类型),由此可知命令对于Shell来说多么重要。 但当你想用Shell处理一些它不擅长的操作时,你就会觉得这挺痛苦,尽管这个想法本身也是痛苦的,毕竟Shell也不是万能的。比如你想用Bash Shell实现二维数组,还想有若干的命令或函数去处理二维数组,那真是很不容易,尽管你可以将二维数组看作是特殊的一维数组。 Linux像UNIX一样,程序间的标准接口都是文本(即所谓的文本流),Linux用文本流传递数据,最能体现文本流的就是管道。如果你观察仔细,Linux中的许多命令的输出都是看起来以某种格式格式化了的。看起来像数组,像矩阵,这就是为什么我想把数组放到题目中去。由于文本流的存在,命令的输出可以变成普通文件,它看起来就像一个数组,特别像一个二维数组。如何操作这些输出其实也可以看成操作一个二维数组。 Shell编程的核心,除了需要对大量命令的熟练掌握和设计合适的算法(包括程序结构)外,对于数据的处理越来越重要,对于别的程序而言同样也是对数据(数据库)的增删改查。我观察到几乎所有的数据处理都是按照行和列的形式处理的,打印/替换/删除/增加多少行多少列的内容,想想sed、awk这些程序想必很容易联想的到。 (二)Shell或命令行计算数组或文件的行数和列数 也许计算行数对于Linux世界是最重要的,有很多种方法。 1.awk + tail command | awk ‘{print NR}’ | tail -n1 command | awk ‘END{print NR}’ 2.grep + awk 3.sed… read more »

shell: 编写属于自己的linux命令

开篇: 问题和解决思路 在使用一些基础IDE时,工具经常会在我们建立特定文件时给我们一个已经有了一些特定代码的模板文件,但是在linux开发时,没有这样的IDE,怎么办?虽然代码量不是很多,但是能一次简化它和IDE一样也是一件让人心情愉悦的事情 html文件中: 1 2 3 4 5 6 7 8 9 10

shell: Ubuntu Shell脚本编码问题

今天一同事在写一个数据库备份的shell脚本,在多次确定脚本代码无误的情况下,发现脚本输出的结果死活不正常。 在对文件进行可执行权限设置后,执行脚本时输出 上面的第二条Echo语句明显不对,无奈在网上各种找资料,最后在Bing(很少用度娘搜索,Google搜索大家都懂的)中找到关于shell脚本编码的问题。原来那同事在编写脚本的时候不是用的vi编辑器直接编写。而是在windows上面用UE编写后,用ftp工具传到linux系统中。那么现在问题来了,在windows系统中编写的shell脚本的默认格式是dos而不是unix,所以造成输出结果不正确。 查看shell脚本的格式,用vi编辑shell脚本。然后输入”:set ff?>”如果输出结束是”fileformat=dos>”,则需要修改文件的格式 再次执行脚本文件,可以正确输出年月日格式的文件名 所以在这看来,以后编写脚本还是直接在linux系统中使用vi编写更为实在。一来熟练了vi编辑器,二来还可以避免带来不必要的麻烦。 转载: http://www.jenkihuang.com/experience/2015/04/ubuntu-shell-charset.html 原文:http://www.cnblogs.com/jenkiHuang/p/4424965.html

shell: 企业合格的linux运维必会shell编程题

企业合格的linux运维必会编程题,能独立完成的同学就业工资不会低于10K 这是 老男孩linux运维班 要求学生必会的题目,完不成的不能合格毕业,每个完成的都奖励价值500-1000元的等值礼物(以当天考试成绩宣布为准),要进要退自己抉择,伙伴们走起! 实战考试时间就在2015年4月15日上机实战,禁止大面积抄袭学习课堂笔记否则无奖励! > 共18道考试题,面授上课几乎全部讲解过类似的案例,考试题略微变更而已。 企业面试题1: (生产实战案例):监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟: 阶段1:开发一个守护进程脚本每30秒实现检测一次。 阶段2:如果同步出现如下错误号(1158,1159,1008,1007,1062),则跳过错误。 阶段3:请使用数组技术实现上述脚本(获取主从判断及错误号部分) 企业面试题2: 使用for循环在/oldboy目录下通过随机小写10个字母批量创建10个html文件,名称例如为: 企业面试题2:请用至少两种方法实现! 将以上文件名中的oldboy全部改成oldgirl(用for循环实现),并且html改成大写。 企业面试题3: 批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机8位字符串)。 企业面试题4: 写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些(方法有很多) 企业实战题5:请用至少两种方法实现! 写一个脚本解决DOS攻击生产案例 提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。防火墙命令为:iptables-A INPUT -s 10.0.1.10 -j DROP。 企业实战题6: 开发mysql多实例启动脚本: 已知mysql多实例启动命令为:mysqld_safe–defaults-file=/data/3306/my.cnf & 停止命令为:mysqladmin -u root… read more »

shell: linux正则表达式awk讲解

awk和sed一样是流式编辑器,它也是针对文档中的行来操作的,一行一行的去执行。awk比sed更加强大,它能做到sed能做到的,同样也能做到sed不能做到的。awk常用来分段; awk不用加任何参数就可以实现 + ? * .  | 这些特殊符号; 1、截取文档中的某个段 [[email protected] ~]# head -n2 passwd |awk -F: ‘{print $1}’ root bin [[email protected] ~]# head -n2 passwd |awk -F: ‘{print $0}’ root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [[email protected] ~]# head -n2… read more »

shell: 【每日一博】Shell 特殊用法续

1.函数中输出函数名: $FUNCNAME 注意该变量是一个数组,如果嵌套调用函数,那么最里层函数中的此变量会是按调用顺序排列的所有函数的数组,如: 输出内容是:log action 如果只想获得当前函数的名称,直接输出即可: echo $ FUNCNAME 用途:日志函数或者函数名传递等。 参考: Bash 获取当前函数名 2.循环中的跳转: continue [n] 首先需要声明的是continue可用于子函数,跳转到父函数中的指定层次循环。如: n的值从1开始(不写默认为1,数字越大则层数越高,超过总循环层数时值为最大层数); 以上代码中只有最上层”x>”会正常循环完,其余子层都在首轮跳出,此时n的最大值为3; 若在son后加一个“&”使其在后台运行,此时continue能控制y、z两层,但不能跳转到x,即n的最大值为2。 3.uniq注意事项 Note: ‘uniq’ does not detect repeated lines unless they are adjacent. 该命令容易被忽略的一点是,它只会比较相邻的行而不会跨行比较,除非必要,否则最好先排序: sort -u… read more »

shell: Linux Shell 学习笔记 一 目录结构

以Red Hat Enterprise Linux 各版本为例,RHEL中目录具体作用如下, /bin       存放普通用户使用的命令 /sbin     存放管理员可以执行的命令 /home   存放普通用户的家目录 如zhangshan家目录为/zhangshan /root     管理员的家目录 /etc       存放配置文件的目录 /boot     存放跟启动相关的文件 /usr       用户自定义的相关程序文件 /porc     内核,硬件参数相关的目录 /var       内容经常变化的文件存放目录 如日志 /temp    临时文件的存放目录 /run       存放进程文件的目录  (RHEL7) Linux Shell  分为外部命令和内部命令, 内部命令:指的是集成于Shell解释器程序(如Bash)内部的一些特殊指令,也成为内建(Built-IN)指令。内部命令属于Shell的一部分,所以并没有单独对应的系统文件,只要Shell解释器被运行,内部指令也就自动载入内存了,用户可以直接使用。内部命令无需从硬盘中重新读取文件,因此执行效率更高。 外部命令:指的是Linux系统中能够完成特定功能的脚本文件或二进制程序,每个外部命令对应了系统中的一个文件,是属于Shell解释器程序之外的命令,所以称为外部命令。Linux系统必须知道外部命令对应的文件位置,才能够由Shell加载并执行。 Linux系统默认会将存放外部命令、程序的目录(如/bin、/usr/bin、/usr/local/bin等)添加到用户的“搜索路径”中,当使用位于这些目录中的外部命令时,用户不需要指定具体的位置。因此在大多数情况下,不用刻意去分辨内部、外部命令,其使用方法是基本类似的。… read more »

Sidebar