linux脚本

shell脚本编程

左心房为你撑大大i 提交于 2019-12-04 16:20:46
什么是shell shell是操作系统的最外层,shell可以合并编程语言以控制进程和文件,以及启动和控制其他程序。shell通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出,简单来说shell就是一个用户跟操作系统之间的一个命令解释器。 shell环境 Linux shell种类有很多,常见的shell如下: bourne shell(/user/bin/sh或/bin/sh); bourne again shell(/bin/bash); C shell(/user/bin/csh); K shell(/user/bin/ksh); shell for root(/sbin/sh); 不同的shell语言的语法有所不同,一般不能交换使用,最常用的shell是bash,也就是bourne again shell。bash由于易用和免费,在日常生活中被广泛使用,也是大多数Linux操作系统默认的shell环境。 shell脚本及Hello World 要熟练掌握shell编程语言,需要大量的练习,初学者可以用shell打印“Hello World”字符。 shell脚本编程需要注意以下几个事项: 1、shell脚本名称命名一般为英文的大写、小写; 2、不能使用特殊符号、空格来命名; 3、shell脚本后缀以.sh 结尾; 4、不建议shell命名为纯数字

【linux】grep 和【perl】 脚本实现的grep功能的运行时间差异

▼魔方 西西 提交于 2019-12-04 15:31:53
参考在网上找到的代码,没想到相差那么大,应该是grep比perl的模式匹配更快吧。 [gzhy@nearby stat]$ wc -l 1 234033 1 [gzhy@nearby stat]$ perl 1.pl cost 1 seconds zjtel : 32606 [gzhy@nearby stat]$ perl 2.pl cost 111 seconds zjtel : 32606 2.pl #!/usr/bin/perl my $time=time(); open(file,"1"); while(<file>;) { chomp; if(m/:zjtel:/) { $zjtel++; } } close(file); $time=time()-$time; print "cost $time seconds\n"; print "zjtel : $zjtel\n"; 1.pl #!/usr/bin/perl $time=time(); $count=`grep zjtel 1 | wc -l `; $time=time()-$time; print "cost $time seconds\n"; print "zjtel : $count\n" : 测试:在一个文件夹下有199个纯文本文件,要扫描265个关键字,分别用 pattern-match

linux设置自动启动

喜你入骨 提交于 2019-12-04 11:37:58
1 设置网络自动连接 vim /etc/sysconfig/network-scrpits/ifcfg-xx 修改ONBOOT=yes 2 设置开机自动启动脚本 (1)增加脚本的可执行权限 chmod +x xx.sh (2)添加脚本到开机自动启动项目中 cd /etc/rc.d/init.d chkconfig --add xx.sh chkconfig xx.sh on 3 设置开机自动运行指令 /etc/rc.d/rc.local中加入对应指令 来源: https://my.oschina.net/u/3732258/blog/3129784

linux shell脚本语法笔记

你离开我真会死。 提交于 2019-12-04 11:19:26
1.&,&&,|,|| & :除了最后一个cmd,前面的cmd均已后台方式静默执行,执行结果显示在终端上,个别的cmd错误不影响整个命令的执行,全部的cmd同时执行 && :从左到右顺序执行cmd,个别cmd错误不产生影响 | :各个cmd同时在前台被执行,但是除最后的cmd之外,其余的执行结果不会被显示在终端上 || :从左到右顺序执行cmd,只有左侧的cmd执行出错,右边的cmd才会被执行,同时一旦有cmd被成功执行,整个命令就会结束,返回终端 2.xargs xargs 能够捕获一个命令的输出,然后传递给另外一个命令,例如: 2.1. rm 删除多文件 find ~ -name ‘*.log’ -print0 | xargs -0 rm -f 2.2. 获得/etc/ 下所有*.conf 结尾的文件列表 # find /etc -name "*.conf" | xargs ls –l 2.3. 使用xargs 下载所有链接 # cat url-list.txt | xargs wget –c 2.4. 查找所有的.txt文件,并且压缩它 # find / -name *.txt -type f -print | xargs tar -cvzf txtfile.tar.gz 3 5. 拷贝所有的图片文件到一个外部的硬盘驱动 # ls *.jpg | xargs -n1 -i

shell-基础

本秂侑毒 提交于 2019-12-04 10:43:25
Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出屏幕返回给用户。 这种对话方式可以是: 交互的方式:从键盘输入命令,通过/bin/bash的解析,可以立即得到Shell的回应 [root@localhost ~]# echo ls |bash anaconda-ks.cfg tsar [root@localhost ~]# ls anaconda-ks.cfg tsar 非交互的方式: 脚本 什么是Shell脚本 命令、变量和流程控制语句等有机的结合起来 shell脚本擅长处理纯文本类型的数据,而linux中,几乎所有的配置文件,日志,都是纯文本类型文件 脚本语言的种类 一、编译型语言 定义: 指用专用的编译器,针对特定的操作平台(操作系统)将某种高级语言源代码一次性翻译成可被硬件平台直接运行的二进制机器码(具有操作数,指令、及相应的格式),这个过程叫做编译(./configure make makeinstall );编译好的可执行性文件(.exe),可在相对应的平台上运行(移植性差,但运行效率高)。。 典型的编译型语言有, C语言、C++等。 另外,Java语言是一门很特殊的语言,Java程序需要进行编译步骤,但并不会生成特定平台的二进制机器码,它编译后生成的是一种与平台无关的字节码文件(

Shell脚本中的多任务并发执行

泄露秘密 提交于 2019-12-04 09:41:41
正常情况下,Shell脚本中的命令是串行执行的,当一条命令执行完才会执行接下来的命令。比如下面这段代码: #!/bin/bash for i in {1..10};do echo $i done echo "END" 执行结果: 1 2 3 4 5 6 7 8 9 10 END 可以看到,循环体中的“echo $i”命令是串行执行的。但是如果所执行的命令耗时比较长,这就会导致整个程序的执行时间非常长,甚至可能导致程序执行时卡在那里,长时间失去响应。 比如我们需要完成这样一个任务:编写一个脚本,扫描192.168.80.0/24网络里,当前在线的主机有哪些,能ping通就认为在线。 要完成这个任务,编写脚本并不复杂,下面是写好的代码: #!/bin/bash for i in {1..254};do ip="192.168.80.$i" ping -c 2 $ip &> /dev/null && echo $ip is up done 这里对脚本中使用的ping命令稍作说明。Linux中的ping命令在执行后会连续不断地发包,因而脚本中的ping命令使用了“-c”选项,指定只发2次包,如果能收到响应,就认为目标主机在线。 这个脚本在逻辑上并没有问题,但是在执行后由于要对网络中的254个IP地址轮流执行ping命令,耗时非常长,而且此时的脚本无法使用Ctrl+C强制终止

python 脚本定时删除 elk索引

一曲冷凌霜 提交于 2019-12-04 09:01:50
脚本如下 一、python 脚本如下 #! /usr/bin/python # -*- coding=utf-8 -*- import urllib import urllib.request import re import datetime import time import codecs from urllib.request import urlopen import requests def match(urlGet): urlGet1 = urllib.request.urlopen(urlGet).read() #去除空格 urlGet2 = codecs.getdecoder("unicode_escape")(urlGet1)[0] urlGet3 = re.sub(' +','|',urlGet2) #已换行为分隔符 urlGet4 = urlGet3.split('\n') return urlGet4 def indexGet(urlGet4): for indexFull in urlGet4: try: #获取索引名称 indexpattern = indexFull.split('|')[2::9] #正则匹配年月日 pattern = re.compile(r'\d{4}\.\d{1,2}\.\d{1,2}') #将j列表转成字符串,获取匹配的索引

shell脚本学习

我只是一个虾纸丫 提交于 2019-12-04 06:38:55
Shell学习 我的博客 shell脚本学习 执行脚本报错“/bin/bash^M: 坏的解释器:没有那个文件或目录” 问题     问题原因:在win下操作的时候,编辑了hello.sh文件,换行结尾是\n\r,但是在linux下是\n,所以会有多处来的\r     解决方法:sed -i 's/\r$//' hello.sh echo是liunx的输出命令,#表示注释: Liunx已经定义的环境变量:$PATH 、$HOME 、$SHELL 写一个加法的shell脚本 #!/bin/bash funWithReturn(){ echo "输入第一个数字: " read aNum echo "输入第二个数字: " read anotherNum echo "两个数字分别为 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum)) } funWithReturn echo "输入的两个数字之和为 $?" 运行脚本 #!/bin/bash echo "欢迎中国队!" java -jar data-sending.jar & 来源: https://www.cnblogs.com/gujiazhouwang/p/11843267.html

PHP超全局变量 $_SERVER

天大地大妈咪最大 提交于 2019-12-04 06:34:16
' PHP_SELF ' 当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/foo/bar.php 的脚本中使用 $_SERVER['PHP_SELF'] 将得到 /foo/bar.php 。 __FILE__ 常量包含当前(例如包含)文件的完整路径和文件名。 从 PHP 4.3.0 版本开始,如果 PHP 以命令行模式运行,这个变量将包含脚本名。之前的版本该变量不可用。 'argv' 传递给该脚本的参数的数组。当脚本以命令行方式运行时,argv 变量传递给程序 C 语言样式的命令行参数。当通过 GET 方式调用时,该变量包含query string。 'argc' 包含命令行模式下传递给该脚本的参数的数目(如果运行在命令行模式下)。 ' GATEWAY_INTERFACE ' 服务器使用的 CGI 规范的版本;例如,“ CGI/1.1 ”。 ' SERVER_ADDR ' 当前运行脚本所在的服务器的 IP 地址。 ' SERVER_NAME ' 当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。 ' SERVER_SOFTWARE ' 服务器标识字符串,在响应请求时的头信息中给出。 ' SERVER_PROTOCOL ' 请求页面时通信协议的名称和版本。例如,“HTTP

shell编程

社会主义新天地 提交于 2019-12-04 06:30:40
linux系统下给命令指定别名alias命令用法: 在linux系统中如果命令太长又不符合用户的习惯,那么我们可以为它指定一个别名。虽然可以为命令建立“链接”解决长文件名的问题,但对于带命令行参数的命令,链接就无能为力了。而指定别名则可以解决此类所有问题。只要举一些例子就可以了: alias l='ls -l' ;用 l 代替 ls -l 命令(Xenix 下就有类似的 l 命令) alias cd..='cd ..' ;用 cd.. 代替 cd .. 命令(对在 DOS 下使用惯了 cd.. 的人帮助很大) alias md='mkdir' ;用 md 代替 mkdir 命令(对在 DOS 下…) alias c:='mount /dev/hda1 /mnt/c & cd /mnt/c' ;用 c: 命令代替命令序列:安装 DOS 分区,再进入。 通常我们可以将以上命令放到自己的home目录下的.bash_prifle文件中,在使用source .bash_profile 命令.即可使用. Shell编程基础 我们可以使用任意一种文字编辑器,比如gedit、kedit、emacs、vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行): # !/bin/sh 注意:最好使用“!/bin/bash”而不是“!/bin/sh”,如果使用tc shell改为tcsh