在windows下用notapad++写的shell脚本,拷贝到Linux下却无法正常工作,而且一碰到空白行就会报错:./place_category.sh: line 2: $’r’: command not found

这些都是由于脚本的格式不对造成的。

因为在windows下,换行符是rn ,在Linux下是 n,所以在Linux下,当遇到空白行时,实际上是当作有一个命令r去执行,当然会报错了。

而且我定义了一个数组,结果也无法能够当作数组形式的数据,完全还是当作字符串一样。

#!/bin/bash
filename=$1
#定义数组,学校类型的关键字。
schools="学院 校"	
array=($schools)
# echo ${array[1]}

解决问题的办法就是在Linux下,或者windows下的cygwin也可以,运行dos2unix file.sh 命令,把shell脚本格式进行转换后即可。


阅读全文

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。

top - 15:59:30 up 55 days,  5:05,  4 users,  load average: 0.19, 0.33, 0.30
	Tasks: 134 total,   1 running, 133 sleeping,   0 stopped,   0 zombie
	Cpu(s):  2.2%us,  0.4%sy,  0.0%ni, 97.2%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
	Mem:  12292800k total,  5476308k used,  6816492k free,  1117884k buffers
	Swap:  8385920k total,     5136k used,  8380784k free,  3281700k cache
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                
10928 root      15   0  156m 9984 5328 S  6.0  0.1 971:34.63 php                                                                    
15234 root      18   0  157m  13m 5272 S  1.3  0.1   0:00.04 php                                                                    
 7664 www       15   0  420m  26m  15m S  0.7  0.2   0:00.55 httpd                                                                  
    1 root      15   0 10348   80   48 S  0.0  0.0   1:07.21 init                                                                   
    2 root      RT  -5     0    0    0 S  0.0  0.0   0:04.55 migration/0                                                            
    3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0                                                            
    4 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0                                                             
    5 root      RT  -5     0    0    0 S  0.0  0.0   0:02.20 migration/1</pre>

统计信息区

前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:

15:59:30

当前时间

up 1:22

系统运行时间,格式为时:分

1 user

当前登录用户数

load average: 0.06, 0.60, 0.48

系统负载,即任务队列的平均长度。

三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:

Tasks: 29 total

进程总数

1 running

正在运行的进程数

28 sleeping

睡眠的进程数

0 stopped

停止的进程数

0 zombie

僵尸进程数

Cpu(s): 0.3% us

用户空间占用CPU百分比

1.0% sy

内核空间占用CPU百分比

0.0% ni

用户进程空间内改变过优先级的进程占用CPU百分比

98.7% id

空闲CPU百分比

0.0% wa

等待输入输出的CPU时间百分比

0.0% hi

0.0% si


阅读全文

用awk进行文本处理,少不了就是它的数组处理。那么awk数组有那些特点,一般常见运算又会怎么样呢。我们先看下下面的一些介绍,结合例子我们会讲解下它的不同之处。在 awk 中数组叫做关联数组(associative arrays),因为下标记可以是数也可以是串。awk 中的数组不必提前声明,也不必声明大小。数组元素用 0 或空串来初始化,这根据上下文而定。

一、定义方法

1:可以用数值作数组索引(下标)

Tarr[1]=“cheng mo”
Tarr[2]=“800927”

2:可以用字符串作数组索引(下标)

Tarr[“first”]=“cheng ”
Tarr[“last”]=”mo”
Tarr[“birth”]=”800927”
直接使用print Tarr[1]即可得到对应的值。
二、数组相关函数
1.获取数组长度 length函数; print length(Tarr);
2.输出数组内容(无序,有序输出):
无序输出:for(k in Tarr){print k,Tarr[k]}
有序输出:for(k=1;k<=length(Tarr);k++){print k,Tarr[k];}//注意,数组下标从1开始。
3.判断键值存在以及删除键值:
键值是否存在:if( "11211" in Tarr){print "ok";}
删除键值:delete Tarr['key'];

阅读全文

转自: NinGoo的博客

经常可以在一些脚本,尤其是在crontab调用时发现如下形式的命令调用

/tmp/test.sh > /tmp/test.log 2>&1

前半部分/tmp/test.sh > /tmp/test.log很容易理解,那么后面的2>&1是怎么回事呢?

要解释这个问题,还是得提到文件重定向。我们知道>和<是文件重定向符。那么1和2是什么?**在shell中,每个进程都和三个系统文件相关联:标准输入stdin,标准输出stdout和标准错误stderr,三个系统文件的文件描述符分别为0,1和2。**所以这里2>&1的意思就是将标准错误也输出到标准输出当中。

下面通过一个例子来展示2>&1有什么作用:

$ cat test.sh
t
date

test.sh中包含两个命令,其中t是一个不存在的命令,执行会报错,默认情况下,错误会输出到stderr。date则能正确执行,并且输出时间信息,默认输出到stdout

./test.sh > test1.log
./test.sh: line 1: t: command not found
$ cat test1.log
Tue Oct 9 20:51:50 CST 2007

可以看到,date的执行结果被重定向到log文件中了,而t无法执行的错误则只打印在屏幕上。

$ ./test.sh > test2.log 2>&1
$ cat test2.log
./test.sh: line 1: t: command not found
Tue Oct 9 20:53:44 CST 2007

这次,stderr和stdout的内容都被重定向到log文件中了。

实际上, > 就相当于 1> 也就是重定向标准输出,不包括标准错误。通过2>&1,就将标准错误重定向到标准输出了,那么再使用>重定向就会将标准输出和标准错误信息一同重定向了。如果只想重定向标准错误到文件中,则可以使用2> file。


阅读全文

使用 cURL 获取站点的各类响应时间 – dns解析时间,响应时间,传输时间等:

curl -o /dev/null -s -w %{http_code}:%{http_connect}:%{content_type}:%{time_namelookup}:%{time_redirect}:%{time_pretransfer}:%{time_connect}:%{time_starttransfer}:%{time_total}:%{speed_download} digdeeply.org

这是一个本人博客站点执行 curl 命令的情况。输出通常是 HTML 代码,通过 -o 参数发送到 /dev/null。-s 参数去掉所有状态信息。-w 参数让 curl 输出的计时器的状态信息。

一次http请求中的各个时间段-dns解析,等待服务器响应,获取内容等

一次http请求中的各个时间段-dns解析,等待服务器响应,获取内容等

下边对-w参数做个详细的解释,由我(DigDeeply)翻译。有不对的地方请大家指出。(英文原文:http://curl.haxx.se/docs/manpage.html)


阅读全文

在windows下vim的中文字体显示并不好,所以我们需要调整字体显示编码为utf-8,只有这样才能使用美观的中文。这时候可能出现很多中文乱码。

如:文件显示乱码、菜单乱码、右键菜单乱码、conlse输出乱码、文件关联右键菜单乱码等等。

以下_vimrc配置可以解决以上问题。

if has(“gui_running”)
set encoding=utf-8
set fileencodings=utf-8,chinese,latin-1

if has(“win32″) set fileencoding=chinese else set fileencoding=utf-8 endif

let &termencoding=&encoding

” 解决菜单乱码 source $VIMRUNTIME/delmenu.vim source $VIMRUNTIME/menu.vim

” 解决consle输出乱码 language messages zh_CN.utf-8 endif


阅读全文

如何确定linux操作系统是32位还是64位的?

只要只用以下几个命令即可实现。

5种查看linux操作系统是多少位的方法:

#1. uname -a 通过查看i386还是x86_64即可确认
#32位
[fukun@localhost ~]$ uname -a
Linux localhost.localdomain 2.6.18-164.el5 #1 SMP Thu Sep 3 03:33:56 EDT 2009 i686 i686 i386 GNU/Linux
#64位
[fukun @~]$uname -a
Linux localhost.localdomain 2.6.18-164.el5 #1 SMP Thu Sep 3 03:28:30 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

#2.使用更简单的 uname -i ,更直接的看到结果 #32位 [fukun@localhost ]$ uname -i i386 #64位 [fukun @]$uname -i x86_64

#3.通过 getconf LONG_BIT #32位 [fukun@localhost ]$ getconf LONG_BIT 32 #64位 [fukun @]$getconf LONG_BIT 64

#4.通过echo $HOSTTYPE来查看 #32位 [fukun@localhost ]$ echo $HOSTTYPE i686 #64位 [fukun @]$echo $HOSTTYPE x86_64

#5.通过 file /sbin/init 来确认 #32位 [fukun@localhost ]$ file /sbin/init /sbin/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped #64位 [fukun @]$file /sbin/init /sbin/init: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

#ps.使用 getconf WORD_BIT不可行,在32位或64位下,获得的值都为32.


阅读全文

作者的图片

DigDeeply

Technology Stack: PHP/Openresty/GoLang, and so on…

Web Development Engineer

Beijing China