pr涨到2了

阅读全文

今天查网站pr, 时光邮局没有变, 还是0. 可能主要的原因有两个吧, 一个是除了本网站做了链接上去, 其他很少有指向它的链接, 导致收到的pr贡献太少. 另一方面, 写公开信的人太少, 很多人都是写密信, 所以网站内容更新的频率其实很不频繁~综合起来, 导致它的pr没有变化. 不过惊喜的是, 本网站的pr竟然一下子达到了2. 看样子走坚持更新的技术+随笔博客这样的路线还是靠谱的~打算再去找一些友情链接过来. 当然啦, 更新频率肯定还是得坚持的~~ 5.5补充: 更加惊讶地发现, 时光邮局的pr也升到1了...大概是被屌丝网带起来的~~哈哈, 我从来木有过pr超过0的网站...现在终于有两个啦!!继续努力!!

The post pr涨到2了 appeared first on 邮递员大叔.

阅读全文>>

shell变量之辨[8]

阅读全文

[环境变量]
脚本只能对它产生的子进程 export 变量.一个从命令行被调用的脚本export 的变量,将不能影响调用这个脚本的那个命令行 shell 的环境.
function func()
{
    echo "GLOBAL = $GLOBAL";
    export LOCAL="abc"
    echo "LOCAL = $LOCAL";
}
export GLOBAL="global";
export LOCAL="LOCAL";
(func)  #()即表示使用一个子shell执行
echo "LOCAL = $LOCAL";
可能上面的一句话粗看起来比较费解. 解释一下 1. export, 即可以改变一个环境变量的值, 比如我们在linux shell下可以export LANG=en_US, 去设置语言变量 2. 如果A进程, 调用B进程(比如调用另一个shell脚本, 或者是用一个子shell去执行一个函数) 3. B进程中使用export去改变环境变量的值, 该变量在B中生效 4. A进程中的环境变量不被影响

The post shell变量之辨[8] appeared first on 邮递员大叔.

阅读全文>>

shell变量之辨[7]

阅读全文

[局部变量]

a="global";
function func()
{
    a="func_global";
    echo "in func: a = $a";
}

function func2()
{
    local a="func2_local";
    echo "in func2: a = $a";
}

echo "a = $a";
func;
echo "a = $a";
func2;
echo "a = $a";
在函数中可以通过”local”的方式标明变量只在局部使用, 也就是说在fun2中, 我们通过local将变量设置为了只在函数内部使用. 因此它的赋值等操作不会影响函数之外的同名变量.
局部变量能让我们方便地使用递归..但是我们非常不推荐:
慢, 可能容易栈溢出

The post shell变量之辨[7] appeared first on 邮递员大叔.

阅读全文>>

shell变量之辨[6]

阅读全文

[变量的类型?]

看看下面的a, b在不同的时候分别是什么类型?
#!/bin/bash
a="1234"
let "a += 1"
echo "a = $a";

b=${a/23/AB};
echo "b = $b";
b=1234
echo "b = $b";
b=abcd
echo "b = $b";

b=${a/23/AB};
declare -i b
echo "b = $b";
b=1234
echo "b = $b";
b=abcd
echo "b = $b";
shell是不区分变量类型的, 我们使用它的时候它会自动选择我们所需要的类型. 就如同上面的第一段代码, a是字符串, 但是让它做加法运算, 很自然地会把它当成数字, 输出: a = 1235 再看第二段, b被赋值为${a/23/AB}, 即将a中的"23"替换为"AB", 输出的即为: b = 1AB5 再接下来, b被重新赋值为1234这样的一个"Int", 或者是abcd这样的"String", 很自然地, 输出为: b = 1234 b = abcd 但是, 我们在第三段代码中使用了一个"declare -i", 这个就很神奇了. declare是显式指明变量类型, -i表示int. 输出的结果是这样的: b = 1AB5 b = 1234 b = 0 当b已经是一个字符串1AB5的时候, 输出的值表明它并没有什么变化, 接下来我们赋值为1234这样的int, 也很正常. 但是再次将其赋值为一个字符串, 它表现出来的现象和刚刚第二段就不同了. 输出的内容是0, 即字符串"abcd"被当成一个int类型时, 数值为0    

The post shell变量之辨[6] appeared first on 邮递员大叔.

阅读全文>>

shell变量之辨[5]

阅读全文

[神奇的文件描述符2]

文件描述符
0: 标准输入; 1: 标准输出; 2: 标准错误输出; 因此我们使用3-9
$CMD >> xx.log 2>&1  什么意思? * 执行$CMD命令, 将其标准输出重定向至xx.log, 在文件末尾添加(>>), 同时将标准错误输出也指向标准输出(即也输出至xx.log) 我们可以使用3~9的文件描述符来描述自定义的文件, 上一讲中说到循环中有ssh命令会导致循环失效, 然而使用文件描述符就不会再有这样的情况. 因此我们通常的使用方式是:
#! /bin/bash
echo -e "1\n2\n3\n4" > "$0.txt";
exec 3<> $0.txt	#注意3和<>之间没有空格

while read line <& 3	#注意此处写在while行之后, 而不是done之后
do
    echo "$line";
    ssh "db-testing-ps1833.db01" "ls > /dev/null"
done
这样的话, 输出的结果就是符合我们预期的4行内容啦! [神奇的文件描述符3]
#!/bin/bash
lftp ftp://db-testing-ps1833.db01/home/work/mc-tools <<!
        ls -l;
        bye;
!

ssh db-testing-ps1833.db01 <<!
ls /home/work/mc-tools
!

<<COMMENT
echo hello
COMMENT
看看以上这段代码, 其中使用了这样的形式:
<<delimiter
****
delimiter
它的用处一般有两个:
1. 交互式的行为, 例如通过lftp远程执行命令; ssh远程执行命令等
2. 注释(多行注释)
其中delimiter只要前后确认相同即可, 一般可以使用一些有意义的, 比如COMMENT表示注释之类
 

The post shell变量之辨[5] appeared first on 邮递员大叔.

阅读全文>>

shell变量之辨[4]

阅读全文

[函数,函数!]

#! /bin/bash
function func()
{
    echo "I am func";
    echo "xx" >& 2
    return $1
}

a=`func 1`;
echo "begin";
echo "$?";
echo "$a"
echo "end"
echo "----------"

echo "begin";
b=$(func 2);
echo "$?";
echo "$b";
echo "end";
1.  如何获得return的值? 答案: $? 2.  如何获得”echo”的值(I am func) 答案: ``和$()
3.  echo “xx” >&2和echo “xx” >& 1是什么意思? 答案: 文件描述符, >& 1 表示输出至"标准输出", >& 2 表示输出至"标准错误输出"
[神奇的文件描述符]
#! /bin/bash
echo -e "1\n2\n3\n4" > "$0.txt";
while read line		# 还有一种方式和此等价: cat 文件名 | while….
do
    echo "$line";
#   ssh "db-testing-ps1833.db01" "ls > /dev/null"
done < “$0.txt”	#注意<写在done后面, 而不是写在while一行之后
如果没有ssh这一行, 无疑结果就是输出1 2 3 4,分别一行
但是如果在循环中增加了ssh呢? 变成了只输出一行..what a f**king day…
这代表, 我们在循环的时候, 中途由于ssh命令, 导致后面的循环没有进行!
这一个错误非常隐蔽, 没有经验的同学再怎么看代码, 也会坚持认为自己的程序没有任何逻辑上的错误.
错误的原因不赘述, 如何解决? 且听下回分解

The post shell变量之辨[4] appeared first on 邮递员大叔.

阅读全文>>

shell变量之辨[3]

阅读全文

[裸体变量]

什么时候不需要前面的”$”
1. 赋值  a=12+3
2.使用let赋值  let a=12+3
3. for循环
4. read读取变量
#!/bin/bash
a=12+3
echo "$a"

let a=12+3
echo "$a"

for a in 1 2 3
do
	echo -n "$a "
done
echo

read a
echo "$a"
输出为: 12+3 15 1 2 3 123456 123456 [获取命令结果]
如何将一个shell命令的输出结果赋值给变量?
例如让a变量为ls -l的结果(这样的特性非常重要, 我们可以从其他shell命令结果中获取许多有用的结果, wc -l, pwd, readlink -f, ls, date…)
两种方式:
a=`ls -l`;
a=$(ls -l);
#! /bin/bash
a=`ls -l`;
echo "$?"
echo "$a";
echo "____";

b=$(ls -l);
echo "$?"
echo "$b";
echo "____"

c=`ls -l /xxx`;
echo "$?"
echo "$c";
echo "____";

d=$(ls -l /xxx);
echo "$?"
echo "$d";
echo "____"
输出结果自己试一试吧~~

The post shell变量之辨[3] appeared first on 邮递员大叔.

阅读全文>>

shell变量之辨[2]

阅读全文

[大括号的作用]

我们经常在使用一个变量的时候, 用{}将其包住, 为什么?
#! /bin/bash
xxoo="I am 1";
xxoo2="I am 2";
echo $xxoo2
echo ${xxoo}2
echo ${xxoo2}
猜一猜, 输出结果是? 大括号在shell中, 用于防止变量名称的混淆, 大括号括起来之后表示一个完整的变量名称, 防止中间即被截断 上面的一段代码, 输出的内容是: I am 2 I am 12 I am 2 [变量的引用和替换]
#! /bin/bash
xxoo="a b   c                   d";
echo $xxoo
echo "$xxoo"
echo '$xxoo'
echo \$xxoo
echo "\$xxoo“
让我们猜一猜, 这种情况下的运行结果? 不使用双引号: 变量替换, 和echo a b    c            d这样形式的结果一样 双引号: 弱引用; 单引号: 强引用 因此实际上, 上面一段程序的输出是: a b c d a b   c                   d $xxoo $xxoo $xxoo

The post shell变量之辨[2] appeared first on 邮递员大叔.

阅读全文>>

shell变量之辨[1]

阅读全文

来baidu之后, 经常使用到shell脚本. shell脚本功能比较简单, 但因为可以方便地使用linux自带的很多命令, 因此使得shell脚本在平时的工作中依然能够发挥非常大的作用. 之前做了一份ppt, 主要针对shell变量的许多使用方式进行了总结. 并且自己去配了相应的测试脚本等. (部分内容是参考《高级Bash脚本编程指南.pdf》这本书上的内容) 所以从今天开始, 就写一写相关的内容, 希望对初学shell的同学起到一定的帮助吧. [基本赋值] $: 变量替换操作符 例如:

a=175
hello=$a
其中=的前后绝对不要有空格, 为什么?
1. hello =value  执行hello命令, 带有参数”=value”
2. hello= value  将hello赋值为””(空), 执行value命令
#! /bin/bash
a=175
hello=$a

hello =$a
hello= $a
上面这段代码会如何输出? ./test1.sh: line 5: hello: command not found ./test1.sh: line 6: 175: command not found  

The post shell变量之辨[1] appeared first on 邮递员大叔.

阅读全文>>

如何在thinkphp(sae版)中使用ueditor插件[3]

阅读全文

接下来算是比较重要的一点了吧, 在SAE平台上, 把上传图片神马的给用起来~~ 话说, 看了下1.2版本的UEditor, 发现比1.1.8版本多了挺好玩儿的功能啊~ 插入图片和插入视频这两个按钮, 里面都增加了一个"搜索"的功能, 搜索之后的结果选中了就可以直接插入编辑框中, 嗯, 这个还是挺赞的~ 其中视频搜索, 会自动解析视频的地址, 这个真心赞啊~ 废话不多说, 进入正式环节 1. 去除图片的"在线管理"功能. (这玩意儿功能是挺好的, 但是又得改程序, 又可能有权限之类的问题, 还是不开放给用户好啦) 找到dialogs/image/image.html, 删除以下代码:

<span tabSrc="imgManager">在线管理</span>
2. 修改图片上传的php文件, 还是在相同的文件中, 找到如下代码:
url:'../../server/upload/php/imageUp.php',
另外, 1.1.8的版本中, 是这样的:
url:'../../server/upload/php/up.php',
找到这个server目录中的imageUp.php文件进行修改. 找到之后发现同级目录下, 总共是有3个文件的, 分别是fileUp, imageUp, snapImageUp.(1.1.8只有up.php) , 这三个文件, 顾名思义, 分别是用来处理文件上传, 图片上传, 截图上传的~ 修改起来其实都比较类似, 我这儿还是只拿imageUp.php做个示例好了. 核心工作其实非常简单, 就是写一个新的php脚本, 用来替代原有的imageUp.php, 因为我是用的Thinkphp, 所以干脆直接把我的代码放出来吧 1) 修改以上的调用路径为:
url:'../../../../Pic/upload',
2) 写一个PicAction.class.php, 内容为:
<?php
class PicAction extends Action {
	public function upload()
	{
		//文件上传状态,当成功时返回SUCCESS,其余值将直接返回对应字符窜并显示在图片预览框,同时可以在前端页面通过回调函数获取对应字符窜
	    $state = "SUCCESS";

	    $title = htmlspecialchars($_POST['pictitle'], ENT_QUOTES);
	    $domain = C('PIC_UPLOAD_DOMAIN');
	    $path = C('PIC_UPLOAD_PATH');
	    $file = "";

	    //格式验证
	    $current_type = strtolower(strrchr($_FILES["picdata"]["name"], '.'));
	    if(!in_array($current_type, C('PIC_FILE_TYPE'))){
	        $state = "不支持的图片类型!";
	    }
	    //大小验证
	    $file_size = 1024 * C('PIC_FILE_SIZE');
	    if( $_FILES["picdata"]["size"] > $file_size ){
	        $state = "图片大小超出限制!";
	    }
	    //保存图片
	    if($state == "SUCCESS")
	    {
	    	$storage = new SaeStorage();
	    	$file = C('PIC_UPLOAD_PATH').uniqid().$current_type;
	    	$result = $storage->upload(C('PIC_UPLOAD_DOMAIN'),
	    		$file, $_FILES["picdata"]["tmp_name"]);
			if(!$result){
				$state = "图片保存失败!";
			}
			$file = $storage->getUrl($domain, $file);
	    }
		echo "{'url':'".$file."','title':'".$title."','state':'".$state."'}";
	}
}

?>
其中C('xx')这样的配置, 就根据自己的需要进行修改吧~这段代码还是比较容易理解的... 嗯哪, 这就ok了...(貌似关键的地方稍微简略了一点啊!!) 3. 唔, 经过再次尝试, 发现上面漏了一处~ 在1.2.0版本中的image.js, 或者是1.1.8版本中的image.html中, 找到如下代码:
tmpObj.data_ue_src = tmpObj.src = editor.options.imagePath + ci.url;
修改为:
tmpObj.data_ue_src = tmpObj.src = ci.url;
即, 针对storage中存储的图片, 直接使用返回的地址(即http://开头的绝对地址了) wordImage目录, 即word粘贴后的image处理, 与image处理类似, 不过第3步的时候, 修改的是如下代码:
img.src = editor.options.imagePath + url.url;
img.setAttribute("data_ue_src", editor.options.imagePath + url.url);  //同时修改"data_ue_src"属性
同理, 也是将+前面的imagePath那一坨去掉即可~~  

The post 如何在thinkphp(sae版)中使用ueditor插件[3] appeared first on 邮递员大叔.

阅读全文>>