标签为 "bash" 的存档

shell/bash if elif then fi 的用法

#!/bin/sh

a=10
b=20

if [ $a == $b ]
then
   echo "a is equal to b"
elif [ $a -gt $b ]
then
   echo "a is greater than b"
elif [ $a -lt $b ]
then
   echo "a is less than b"
else
   echo "None of the condition met"
fi

oh-my-zsh自动更改screen标题的问题解决

使用oh-my-zsh时,同时使用了screen插件,oh-my-zsh对screen有个优化,会自动的变更当前window的title,这个功能虽然看起来很好用,但对我个人来说,很是不习惯,因为我自己有对每个window命名的习惯,每个window干什么自己都记得很清楚,他一来了就给我重命名,搞的我很不习惯,所以,我需要把这个oh-my-zsh自动更改screen的title的情况关闭掉。
查找了相关资料后,找到了一个方法,其实很简单。在 .zshrc 的配置文件里,添加一行:

DISABLE_AUTO_TITLE="true"

就可以了。

shell下输出字符串,用0补齐

在shell下想用循环输出数字,然后用0补齐,拼出文件名来。.
可以使用printf。

for((i=45; i<=49; i++))
do
printf -v file "%05d"  "${i}"
echo $file
done

shell脚本,每次读取文件的一行,逐行读取并处理

shell脚本,每次读取文件的一行,逐行读取并做显示处理,如需其它处理,自行修改即可。
写法一:

#!/bin/bash
while read line
do
      echo $line     #这里可根据实际用途变化
done < filename		#filename 为需要读取的文件名

写法二:

#!/bin/bash 

cat filename| while read line	#filename 为需要读取的文件名,也可以放在命令行参数里。
do
    echo $line
done

Read more…

遍历获取目录所有文件的md5

遍历获取目录所有文件的md5:

DIR='/home/fukun'
find $DIR -type f -print0 | xargs -0 md5sum > ./md5.md5

awk如何使用自定义函数-linux-bash-awk学习笔记

在awk中,是支持自定义函数的,格式如下:


        function name ( parameter, parameter, parameter, ... ) {
                        statements
                        return expression                  # the return statement and expression are optional
        }

但是此段代码块的位置并不是在BEGIN内进行定义,而是紧随在BEGIN之后,具体格式如下:

awk
'BEGIN{
   // do something ...
}
function name(para1, para2){
// do something ...
}
{
    // do something...
    name(a, b);
}
END{
    // do something...
}' filename

Read more…

Linux下bash中关于日期函数date的格式及各种用法

Linux下bash中关于日期函数date的格式及各种用法:
Read more…

bash编程 奇怪的错误 脚本空行报错 数组无法正常工作

在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脚本格式进行转换后即可。

Read more…

linux/unix下shell 编程之 2>&1 是什么意思 [转]

转自: 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。
Read more…

apache日志分析处理;如何通过apache日志计算出PV数和UV数?

google了下,没有找到如何通过apache日志计算出PV数和UV数,在知乎上提问了个,等待高人解答吧。
—–
等了一下午,知乎上也木有人能给出合理的算法,chinaunix上也木有,stackoverflow.com上也木有,自己找时间看一下awstats吧,看看能不能找到答案。
—-
来公布答案了~~
查询了awstats的文档说明,http://awstats.sourceforge.net/docs/awstats_glossary.html 这里

Glossary

Unique Visitor:
A unique visitor is a person or computer (host) that has made at least 1 hit on 1 page of your web site during the current period shown by the report. If this user makes several visits during this period, it is counted only once. Visitors are tracked by IP address, so if multiple users are accessing your site from the same IP (such as a home or office network), they will be counted as a single unique visitor.
The period shown by AWStats reports is by default the current month.
However if you use AWStats as a CGI you can click on the “year” link to have a report for all the year. In such a report, period is a full year, so Unique Visitors are number of hosts that have made at least 1 hit on 1 page of your web site during the year.

awstats中, unique visitor 是根据IP来计算的,所以awstats中统计的UV值,即是IP值。
webtrends中, 也有对UV的统计,不过webtrends也是有JS统计代码的,所以,它的统计原理跟大部分统计代码都一样,通过JS获取客户端的cookie来计算UV值。
附一段webtrends的统计代码,为了避嫌,把敏感信息改掉了,大家看看就行了:


<!-- START OF SmartSource Data Collector TAG -->

<!-- Copyright (c) 1996-2006 WebTrends Inc.  All rights reserved. -->

<!-- V8.0 -->

<!-- $DateTime: 2006/06/27 11:16:10 $ -->

<SCRIPT TYPE="text/javascript"><!--

var gDomain="w.domain.com.cn";	// SDC Production Mode Domain

var gDcsId="dcsoujabcdefghv3n65j4j3j2j2j_test";



var gFpc="WT_FPC";

var gConvert=true;



var gJsWtid;



function dcsSyncGetWtid() {

	document.write("<SCR"+"IPT TYPE='text/javascript' SRC='"+"http"+(window.location.protocol.indexOf('https:')==0?'s':'')+"://"+gDomain+"/"+gDcsId+"/wtid.js"+"'></SCR"+"IPT>");

}

function dcsAsyncGetWtid() {

	gJsWtid=document.createElement("script");

	var jsWtidUrl="http"+(window.location.protocol.indexOf('https:')==0?'s':'')+"://"+gDomain+"/"+gDcsId+"/wtid.js";

	window.setTimeout('gJsWtid.src="' + jsWtidUrl + '"',0);

	var headElem=document.getElementsByTagName("head")[0];

	headElem.appendChild(gJsWtid);

}



if ((typeof(gConvert)!="undefined")&&gConvert&&(document.cookie.indexOf(gFpc+"=")==-1)&&(document.cookie.indexOf("WTLOPTOUT=")==-1)){

//	dcsSyncGetWtid();

	dcsAsyncGetWtid();

}



//-->

</SCRIPT>



<SCRIPT SRC="/inc/js/dcs_tag.js" TYPE="text/javascript"></SCRIPT>



<NOSCRIPT>

<IMG ALT="" BORDER="0" NAME="DCSIMG" WIDTH="1" HEIGHT="1" SRC="http://w.domain.com.cn/dcsoujabcdefghv3n65j4j3j2j2j_test/njs.gif?dcsuri=/nojavascript&WT.js=No&WT.tv=8.0.0">

</NOSCRIPT>

<!-- END OF SmartSource Data Collector TAG -->

查看并询问了一些关于Google Analytics计算UV数的算法,记录如下(感谢 yeshu http://www.wainsight.com):
Google Analytics对于独立访客(UV)的计算,是基于访客浏览器中cookie来确定的,当访客第一次(或cookie丢失后)访问添加GATC的代码时,便会创建一个唯一的cookie(即一个UV),cookie中utma变量记录了访客ID、访问次数、访问时间等信息,UV数以此累加。当访客丢失cookie或更换浏览器重新访问网站,都将会被认为新访客,而创建一个cookie,记录为一个新的UV。
.
以下内容也是一些关于apache日志分析的东东,记录下来。

1.什么是UV?
UV是unique visitor的简写,是指独立访客,是以实际访问的电脑计数。
2.什么是IP?
IP是国际互联网协议(Internet Protocol)的简称,是通过网络间信息地址定位具体计算机的方式之一。
3.UV和IP的概念有什么区别?
对于IP来说,它在同一级别的网络(例如某个局域网、社区网、教学楼网或者INTERNET)范围内是唯一的,同一局域网内的所有电脑都只有一个共同ip。
举例来说,我在一个局域网里,对外的IP是219.129.170.111,那么跟我同一局域网里的所有电脑都是这个IP,也就是说假如整个局域网的电脑都访问您的网站的话,在24小时内也只计算一个IP,所以相对UV来说不是很精确。
而UV跟IP稍有不同,UV是访问你的网站的每一台电脑客户端。现在很多朋友用的网络都是局域网,引入了UV后,就能更精确的统计。
总结:
UV的统计数比IP更为准确,能够准确的计数每一台访问电脑,而IP把同一局域内的所有电脑视为一个。
(PS:UV计数会涉及COOKIE。)
 
Read more…