把Tbl_User_Bak_09_12_15替换为:Tbl_User
sed -i 's/Tbl_User_Bak_09_12_15/Tbl_User/g' Tbl_User_Bak_09_12_15.sql


函数参数 s 表示替换(substitute)文件内字串。其指令格式如下 :
[address1[ ,address2]] s/pattern/replacemen/[flag]
说明:
函数参数 s 最多与两个位址参数配合。
pattern: 它为 reguler expression 字串。它表示文件中要被替换的字串。
阅读全文
awk '{print $1,"asdf", $3, $4}' file > newfile
 作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般情况下,可以手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了。
  在此,介绍如何使用autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程序一样,只要使用“./configure”,“make”,“make instal”就可以把程序安装到Linux系统中去了。这将特别适合想做开放源代码软件的程序开发人员,又或如果你只是自己写些小的Toy程序,那么这个文章对你也会有很大的帮助。阅读全文
关于键盘和鼠标谁更快捷之争,是一个永远被程序员争论的话题。我想大多数人都不会极端的信奉一种操作方式,鼠标更为大众接受,但掌握一些快捷键对于提高操作速度是有帮助的。

si为我们提供了丰富的快捷键和灵活的定制方式,同时还支持自定义命令和脚本,熟练掌握这些之后相信可以使你更加喜欢它。

以下是我认为比较有用的快捷键:

1. ctrl+o,打开文件列表
2. F7,打开符号检索窗口(全局列表)
3. F8,打开符号检索窗口(本地文件)
4. ctrl+=,调转到符号的定义处
5. alt+, /alt+. 跳转到前/后一次停留的地方
7. ctrl+/,全局搜索
8. ctrl+',搜索并替换
9. shift+f8,把当前光标下的关键字标记为高亮
更多:阅读全文
问题:
为方便快速登录某系统,经常会对secureCRT会话设置默认登录用户名和密码。可一旦登录系统的密码做了修改,在secureCRT中要在哪修改已保存密码呢?
处理:
secureCRT将每个session的配置文件保存在
C:\Documents and Settings\Administrator\Application Data\VanDyke下的config文件夹。
根据session名找到对应的配置文件,删除配置文件中password对应的value即可。


如何恢复SecureCRT保存的密码

很老很土却很有效的办法,现公之于众。


登录密码保存在CRT的session配置文件中,不过是加密保存的,看不懂
也不知道它的加密算法,没法解密. 所以如果能让CRT自己显示出来就好了

首先修改要登录的主机的IP地址,改成另外一台机器, 这台的登录密码要跟原来机器的不一样
然后连接,这时因为登录密码错误,会弹出一个窗口,显示了用户名和密码,密码是用一串星号表示的
随便下一个星号密码查看软件,查看一下就行了
我用 “侠客密码查看器”,很不错的查看密码软件。
BSD 和 SYSV 是世上最正统的 UNIX 操作系统,在 LINUX 出现之前,他们统治了整个 UNIX 世界。也正因为此,这两个最正统的 UNIX 核心流派都在实践中积累丰富的经验。


SYSV 偏向于商业,BSD 更偏向于自由和实用。

现 在,本文只讨论 BSD 流派最活跃的发行版 FreeBSD。FreeBSD 作为最重要的一个 BSD 发行版,它保持了 BSD 自由和实用的原则。但亦因为此而忽略很多商业的考虑的相应的功能。凭藉我自己多年 UNIX 的使用经验,列出一些 BSD 的优势与不足,希望以此作为读者的参考。

不足之处:

文件系统:
FreeBSD 的文件系统属于中上水平,但未达至企业级的应用需求。主要体现于文件系统本身存在的脆弱性。在高负载的情况下,文件系统存在有崩溃的可能性。需要注意的 是,导致这样的结果,也有可能由于磁盘控制器(SCSI, RAID 等等)驱动程序本身导致的。没有原厂设备驱动程序是个比较大的问题。

网络:
FreeBSD 的网络性能是无用置疑的!但是网卡驱动(是的,设备驱动是个很重要的因素)不完善会导致性能和稳定性大打节扣。虽然这与 FreeBSD 的核心没有关系,但对于一个可提供服务的整体来说,驱动程序却是一个很重要的组成部份。

另外,由于一个网卡接口上的线的松动,有可能导致网络中断。而一些商业化的 UNIX 操作系统可以在当主网卡不可用时将该网卡上的 IP 转移至可提供正确连接的网卡上。


多处理器(超线程)支持:
在 6.0 出版之前,FreeBSD 对多处理器支持是不尽人意的。INTEL CPU 提供有 HT(超线程)功能。FreeBSD 在 HT 开启的状态下会比在关闭的状态下差。我忘记了超线程的原理,只记得拥有超线程功能的 CPU 在过多的切换情况下性能就会降低,不过在什么时候切换和切换些什么我忘记了。FreeBSD 在开启 HT 后性能会变差,可能与这个有关。


出众之处:

网络:
FreeBSD 的网络性能非常好,可以同时处理海量的网络请求,这使 BSD 非常适合作为防火墙的环境。另外,在网络聊天服务器,如 IM 这种应用上,FreeBSD 也是很合适的选择。网易的 POPO 聊天软件服务器端就是在 FreeBSD 下开发并投入到实际环境中使用的,通过对内核的修改,可以轻松支持数以万计的用户连接,要注意,是永久性的连接,除非用户点击注销按钮。


内存:
你 会发现你服务器上的内存会被 FreeBSD 很好地利用,以使你的服务达至最佳的状态。FreeBSD 不会因为将过多的内存用于磁盘 CACHE 而使更重要的程序获取不到物理内存而让系统使用 SWAP。在实际的环境中,我就遇到过 LINUX 为保持磁盘的 CACHE,而让新任务使用 SWAP,导致新任务执行时间大大拉长。在执行 swapoff -a 操作后,运行同样的新任务只需要原来时间的一半。而系统并没有因为关闭 SWAP 而停机,表示物理内存并没有因为新任务而被耗尽。

一个例子:

Memcached 是一个非常出众的基于内存的缓存服务器。它可以为被其支持的程序语言提供串行化数据保存的功能,这样可以让同一份数据被多台服务器共享,而更重要的是,它的速度非常快。

我 可以利用 PHP 或 JAVA 从数据库中获取数据结果集,然后将结果集的内容保存进 Memcached,其他服务器上的程序同样可以相应的 key 从 Memcached 中获得相同的拷贝。在分布式的环境,这种需求非常明显。我自己也尝试当 SESSION 数据保存至 Memcached 而无需为共享 SESSION 数据而专门架设一台 MYSQL 数据库。


在利用 Memcached 作为数据的中心点,网络的流量会非常大,内存的使用会非常频繁,基本上不与磁盘打交道,而且整个系统的稳健性要求非常高。在这种应用需求下,FreeBSD 自然地成为首选。因为它为高效的网络性能,更合理的内存利用率,和稳健的系统基础。





一挥受到此文的影响故而最终决定在FreeBSD上装Memcached和图片服务器!
原文请见《FreeBSD是什么?FreeBSD的优缺点分析》
Uptimes-Project.org统计了各种操作系统的连续运行时间的最高纪录以及平均值。我们看到目前这项纪录的保持者是由运行于Alpha主机之上的OpenVMS集群系统保持的,其最长连续运行时间为10年180天6小时40分钟,平均运行时间也有4年多。我们常用的Windows系统最高纪录为189天1小时59分钟,平均值为10天多;Linux的表现则为1年 309天(最高值)和接近20天(平均值)



Uptimes Project
Welcome to the uptimes project. This site uses open source software to track, report, and generate statistics based on user data.

We currently have collectively monitored over 10907 Years 98 Days 10 Hours 30 Minutes of uptime.

With more than 2371 hosts reporting.


Overall Statistics
Highest Uptime
NameWVNETcluster

DescriptionWVNET VMScluster with both ...

Uptime11 Years 303 Days 20 Hours 57 Minutes

Detailed Stats
Overall Project Stats
Total Uptime10907 Years 110 Days 6 Hours 18 Minutes


Total Hosts
2371
Active Hosts
134

Operating System Hosts Highest Uptime
BeOS 2 1 Hours 32 Minutes  
Darwin 15 89 Days 12 Hours 40 Minutes  
Embedded 67 1 Years 131 Days 2 Hours 27 Minutes  
FreeBSD 93 5 Years 64 Days 17 Hours 37 Minutes  
Linux 466 3 Years 331 Days 14 Hours 24 Minutes  
Mac OS X 1 1 Days 2 Hours 43 Minutes  
mIRC 1 18 Days 18 Hours 13 Minutes  
NetBSD 9 3 Years 4 Days 23 Hours 5 Minutes  
OpenBSD 18 2 Years 76 Days 4 Hours 39 Minutes  
OpenVMS 15 1 Years 265 Days 8 Hours 42 Minutes  
OpenVMSClust 4 13 Years 337 Days 19 Hours 16 Minutes  
OpenVMSCluster 1 10 Years 5 Days 1 Hours 17 Minutes  
OS/2 3 250 Days 7 Hours 50 Minutes  
Unknown 1 49 Days 16 Hours 41 Minutes  
Windows 779 272 Years 74 Days 12 Hours 28 Minutes  
跨域名设置cookie需要用到两个文件 分别在两个域名下
比如你现在有两个域名 www.a.com  www.b.com
你现在想在b下设置cookie并通过在b下面设置a的cookie
你需要b下面的文件b.php
setcookie("test", ‘value’, time()+3600, "/", ".b.com");//建立b的cookie

<script src="http://www.a.com/seta.php?id=value"></script>//[/url]传递到a中

同时在a下面建立接收文件a.php
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');//有些浏览器需要这句话

setcookie("test", $_GET['id'], time()+3600, "/", ".a.com"); //在a中设置cookie

为你能睡个好觉,呵呵!

以前真没在意cookie的作用域问题,可能以前用.com域名没出过问题,今天用公司的一个cn域名测试,怎么也不能实现cookie共享,后来采用 js设置cookie,在另外一台服务器上共享cookie成功,真叫气人!翻阅了一下php的cookie 规范 ,里面有这么一段

Only hosts within the specified domain can set a cookie for a domain and domains must have at least two (2) or three (3) periods in them to prevent domains of the form: ".com", ".edu", and "va.us". Any domain that fails within one of the seven special top level domains listed below only require two periods. Any other domain requires at least three. The seven special top level domains are: "COM", "EDU", "NET", "ORG", "GOV", "MIL", and "INT".

看出来了吧,真他娘的草蛋!除了"COM", "EDU", "NET", "ORG", "GOV", "MIL", and "INT"这几个后缀的域名可以设置二级作用域,其他的域名至少三级才可以,也就是说想通过设置作用域为b.cn来实现a.b.cn和c.b.cn下的 cookie共享用php是不行的,php只能实现作用域b.a.cn下的d.b.a.cn和e.b.a.cn间的cookie共享,希望大家注意,再遇到此类问题,别浪费时间拼命的测试了……
延伸阅读:http://www.ibiancheng.cn/Article/VBNetArticle/200711/67.html
if[空格  条件  空格] 注意空格!!否则shell无法解析
Shell Scripts学习之if
–b 当file存在并且是块文件时返回真 -c 当file存在并且是字符文件时返回真 -d 当pathname存在并且是一个目录时返回真 -e 当pathname指定的文件或目录存在时返回真 -f 当file存在并且是正规文件时返回真 -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真 -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效 -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真 -p 当file存在并且是命令管道时返回为真 -r 当由pathname指定的文件或目录存在并且可读时返回为真 -s 当file存在文件大小大于0时返回真 -u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真 -w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。 -o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。阅读全文

cut的用法

WEB2.0 jackxiang 2009-12-7 17:41
我们经常会遇到需要取出分字段的文件的某些特定字段,例如 /etc/password就是通过":"分隔各个字段的。可以通过cut命令来实现。例如,我们希望将系统账号名保存到特定的文件,就可以:
cut -d: -f 1 /etc/passwd > /tmp/users
-d用来定义分隔符,默认为tab键,-f表示需要取得哪个字段

当然也可以通过cut取得文件中每行中特定的几个字符,例如:
cut -c3-5 /etc/passwd
就是输出/etc/passwd文件中每行的第三到第五个字符。
-c 和 -f 参数可以跟以下子参数:
N 第N个字符或字段
N- 从第一个字符或字段到文件结束
N-M 从第N个到第M个字符或字段
-M 从第一个到第N个字符或字段
cut  使用 将原串通过 符号 分割成行   cut  -d  分割符号 第几行 ( f几  ) ( -f几 )

awk  将原串通过 符号 分割成行       awk  -F  分割符号 "{print $几 }" 默认为空格

#!/bin/sh
udpstr=`netstat -anp | grep 7001 | cut -d "*" -f2 | cut -d "/" -f1 '`
if[-z "$udpstr"]
then
  $udpid = ` echo $udpstr | tr -d ' ' `  #去掉空格
  kill "$udpid"
fi


tcpstr=`netstat -anp | grep 7002 | cut -d "*" -f2 | cut -d "/" -f1 '`
if[-z "$tcpstr"]
then
  $tcpid = ` echo $tcpstr | tr -d ' ' `  #去掉空格
  kill "$tcpid"
else
  exit 1
fi

cd /var/www/html/modules/sag_manager/socket
php -q  /var/www/html/modules/sag_manager/socket/socket.server.php
exit $?

shell的一些语法:

表 31.4. 常用的位置参数和特殊变量

$0            相当于C语言main函数的argv[0]
$1、$2...     这些称为位置参数(Positional Parameter),相当于C语言main函数的argv[1]、argv

[2]...
$#           相当于C语言main函数的argc - 1,注意这里的#后面不表示注释
$@           表示参数列表"$1" "$2" ...,例如可以用在for循环中的in后面。
$?           上一条命令的Exit Status
$$           当前Shell的进程号

 用户可以比较两个字符串相等或不等,也可以测试一个串是否赋了值。有关串的操作符如下:
 str1 = str2      当两个串有相同内容、长度时为真
 str1 != str2      当串str1和str2不等时为真
 -n str1        当串的长度大于0时为真(串非空)
 -z str1        当串的长度为0时为真(空串)
 str1         当串str1为非空时为真


1、 set命令

当没有参数的时候,列出系统中所有的自定义变量值;当有参数的时候,重置基本参数如$1、$2等。如set

`date` 将date命令的输出当作输入参数;


2、let命令

      执行算术运算。功能如i=j+1,shell语法为:

      let “i=$j+1”,等同于 ‘expr’。 后者只能作用于整数,如 i=`expr $i+1`; 如果使用非整数

,退出状态不为0

3、expr  

      expr也有模式匹配功能。

   可以使用expr通过指定冒号选项计算字符串中字符数。.*意即任何字符重复0次或多次。
        $value=accounts.doc
        $expr $value : '.*'
   输出:12
   在expr中可以使用字符串匹配操作,这里使用模式. d o c抽取文件附属名。
       $expr $value : '\(.*\).doc' 在圆括号前加转义符号是表示圆括号是用于提取功能的。
   输出:accounts

4、shift命令

       将参数表向左移动一个位置,$2变成$1,...,依次类推。

5、shell中可以嵌套命令,使用\`来保护内层命令,如`cd \`pwd\``。

6、设置IFS为换行符:IFS=’

’(还真得换行)

7、两个特殊操作

     命令1 && 命令2 :只有在命令1执行成功时才执行命令2;

     命令1 || 命令2 :命令1失败才执行命令2;

8、变量赋值

     “”引用的字符串需要shell解析其中的``、$、\等特殊字符,而’’引用的字符串则被看作完全的

   字符串,echo ‘`pwd`’将输出`pwd`;而echo “`pwd`”将输出当前目录;

   变量
含义

$var
Var的值,若无定义则无值

${var}
同上,用于同$varx等类型变量区分

${var-thing}
Var有定义时,取值$var;无定义时取值thing,而$var不变

${var=thing}
Var有定义时,取值$var;无定义时取值thing,$var值设为thing

${var?message}
有定义时取值$var;否则打印message并退出shell,若message为空串,打印var:parameter not set

${var+thing}
有定义时取值thing;否则无值





9、shell内部变量

      变量
含义

$#
参数个数

$*
所有参数

$@
同上,稍有区别

$-
Shell的选择项

$?
上次执行命令返回值

$$
Shell的进程标识符

$!
用&启动的最后一个命令的进程标识符

$HOME
cd命令的缺省参数

$IFS
参数分割词的字符表

$MAIL
信件文件,当其改变时给出信息you have mail

$PATH
搜索命令的目录表

$PS1
提示符串,缺省为$

$PS2
后继命令行提示符,缺省为>



有关$*和$@得归纳:

$*和$@扩展为参数,并被重复扫描;参数得空格将字符串分成多个参数;

“$*”表示shell文件的所有参数及其空格连在一起作为单个词处理;

“$@”与shell文件接收的参数等价,参数中的空格被忽略,其结果是等同于原来参数的一个单词列表。

10、 shell模式匹配规则

*      匹配任意字符串,包括空字符串

?      匹配任意单字符串

[ABC]  匹配ABC中任意字符

“…”   完全与…匹配,引号保护特殊字符,也可以写成’…’

\C     匹配C

11、 case语句

case word in

  模式1)  命令;;

  模式2)  命令;;

  …

  *)       命令[;;]

esac

只能匹配一个模式

12、 if 语句
if 命令
then
else
fi
其中换行很重要,then、else和fi仅在换行或分号之后被识别,else部分可选。可以利用case语句替代if

和test测试语句,对于test命令不是内部命令的情况下,case语句执行的要快;

13、循环
1)for i [in 文件(参数)列表]
do
  循环体
done
如果i后面没有in部分,则隐含地表示对shell文件的全部参数,即$*

2) While 命令
            do
                  循环体,只要命令返回状态为真便继续进行
  done

3)until 命令
do
   循环体,只要命令返回状态为假便继续执行
Done
例如:
While sleep 60
do

Done
每隔60秒执行一次循环中的操作;
   另外,where处的控制命令可以是true、false、或者是:,冒号命令是一个shell内部命令,仅仅计
   算参数值,然后返回“真”,但是它不需要调用系统中的命令,所以效率比true命令高;

4)break命令:退出循环,取自C语言。

14、点号命令:
  将文件作为标准输入,从中读入一行一行的命令在当前shell中执行,不要求文件具有可执行权限;

15、 文件命令习惯,后面加上当前进程号码$$为好

16、标准输入命令read
$read greeting
Hello,world
$echo $greeting
Hello,world

17、here document 输入

         <
    <<’s’ 同上,不进行替换。

    <<\s 同上。
在写shell脚本的时候遇到了一个问题,对于下面这个字符串,想把后面从/local开始截取出来。
/work/lib-optimizer/test/local/lib/libcrypto.so.0.9.8
请教同事,知道了一个方法,可以用cut命令,如上面我需要将从local开始的路径截取出来,就可以如下操作
path=/work/lib-optimizer/test/local/lib/libcrypto.so.0.9.8
echo $path | cut -b25-
可是这样,我就得一个个的数要截掉多少个,前面一变动,又得数,呵呵。。。让我想起了初学数学是用手指头数数的时候了 :P 。这样对我现在这种情况来讲不方便,所以网上搜搜,搜到了下面这个小技巧,网上的都没有例子,而且有的说的还不准确,实验了几次才找到正确的。在这里顺便带上个例子。
${varible##*string} 从左向右截取最后一个string后的字符串
${varible#*string}从左向右截取第一个string后的字符串
${varible%%string*}从右向左截取最后一个string后的字符串
${varible%string*}从右向左截取第一个string后的字符串
“*”只是一个通配符可以不要
例子如下:
[xiangyu@localhost ~]$ a="finding"
[xiangyu@localhost ~]$ echo ${a##*in}
g
[xiangyu@localhost ~]$ echo ${a#*in}
ding
[xiangyu@localhost ~]$ echo ${a%%in*}
f
[xiangyu@localhost ~]$ echo ${a%in*}
find

好了,为了让这个字符串截取完整些,把另外些方法也一并贴出来吧!
一、Linux shell 截取字符变量的前8位,有方法如下:
1.expr substr “$a” 1 8
2.echo $a|awk ‘{print substr(,1,8)}’
3.echo $a|cut -c1-8
4.echo $
5.expr $a : ‘\(.\\).*’
6.echo $a|dd bs=1 count=8 2>/dev/null

二、按指定的字符串截取
上面带例子的是第一种方法。
还有一种方法:${varible:n1:n2}:截取变量varible从n1到n2之间的字符串。
可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:
$ EXCLAIM=cowabunga
$ echo ${EXCLAIM:0:3}
cow
$ echo ${EXCLAIM:3:7}
abunga
这种形式的字符串截断非常简便,只需用冒号分开来指定起始字符和子字符串长度。

三、按照指定要求分割:
比如获取后缀名
ls -al | cut -d “.” -f2

http://www.bsdlover.cn/html/25/n-3225.html
我对shell中的精髓是awk不敢苟同,不过awk对字符串的处理很是蛮强大的。

平时做unix/linux管理的朋友对cat、grep等肯定不会陌生,但我要说,awk才是shell中的精髓所在。

我们可以把awk看作一个小的c语言的实现,awk的灵活多变黎补了shell的不足。

学习awk可以从“man awk”开始,但更高级的用法,可以参考网上的更详尽的文档。nawk是awk的兄弟,算是awk的一个高级实现,能实现更多的更高级(好用)的应用。

不会用awk,别说你已经懂了shell编程。

这里附录一下awk的常识:

1、awk程序体的一般格式为:
awk '
BEGIN{}         #程序开始前的预处理部分可以对一些变量进行初始化
{}              #对每条记录进行操作的主体部分
END{}' <文件名> #程序的结束部分,可以对处理的结果作一些善后或总结

2、awk的程序风格完全可以按照c语言的风格书写。例如:
awk '{
if ($1 == "FIND")
regex = $2;
else
{
where = match($0, regex);
if (where)
printf("Match of %s found at %d in %s",regex,where,$0);
}
}' <文件名>
当然,awk支持一些更简洁的书写风格,例如上面的printf语句可以写成:
print "Match of", regex, "found at", where, "in", $0

3、记录和字段的表示法。
整条记录表示为$0,第n个字段表示为$n

4、常用内在变量。
NR 是记录号,即当前正在处理第几条记录。
NF 是当前记录共有多少个字段,
这样,每条记录最后一个字段可表示为$NF,倒数第2个字段可表示为$(NF-1)
FS 是一个说明各个字段如何分隔开的预定义变量.
这经常用于BEGIN语句体中预定义,类似于cut中的-d功能.
RS 是一个说明各个记录如何分隔开的预定义变量.
这经常用于BEGIN语句体中预定义,例如,RS=":" 表示各条记录是用":"分开的.
OFS 定义各字段在输出时如何分隔开.
ORS 定义各条记录在输出时如何分隔开.

5、输出重定向。
例如:
awk '{ print $2 > "phone-list"
print $1 > "name-list" }' BBS-list
双引号内为文件名。

6、在awk中利用管道向shell命令传递参数。
例如:
awk '{ print $1 > "names.unsorted"
print $1 | "sort -r > names.sorted" }' BBS-list

7、awk的特有函数和其它功能请参阅awk手册。

另外,nawk比awk具有更多的功能,它能够把shell中的变量传递给nawk。
nawk格式:
Usage: nawk [-f programfile | 'program'] [-Ffieldstep] [-v var=value] [files]
例如,可以这样向nawk传递shell变量:
nawk -v dr=$HOME -v pk=`hostname` 'BEGIN{print dr pk}'
#!/bin/sh

var=$(awk '{print $1}' tmp.txt)

echo $var

注意:var= 后面没有空格;



-----------------------------------------

awk使用shell变量

1."'$var'"

#!/bin/bash
var="test"
awk 'BEGIN{print "'$var'"}'

这种写法要求变量var中不含有空格。若var中含有空格,那么就要用"'"$var"'"

2.export变量,然后用ENVIRON[“var”]

#!/bin/bash
var="test"
export var
awk 'BEGIN{print ENVIRON["var"]}'

3.使用-v选项。

#!/bin/bash
var="test"
awk -v nvar="$var" 'BEGIN{print nvar}'

shell使用awk传递出来的变量 --eval

$ cat awktest.sh


#!/bin/bash
var1="test"
var2="along"
eval $(awk 'BEGIN{print "var1=along;var2=test"}')
echo "var1:"$var1
echo "var2:"$var2

$ ./awktest.sh


var1:along
var2:test



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shuinieh/archive/2009/10/10/4649723.aspx
shell基础:

$# :传递到脚本的参数个数。
一般$1表示第一个参数,  
  $2表示第二个参数,  
  ..依此类推,哈哈,  
  不要超过就是了哦
main(int   argc,   char   *   argv[])  
    
  $1   是表示   argv[0]?     argv[1]?  
$1表示argv[1]

动态获取shell的argv变量及下载Url的文件名及目录位置,wget下载确保安全下载的方法:

阅读全文
Shell是每一个UNIX系统都有的工具,他功能强大,有很多系统启动程序是用Shell来写的.

在这里,我们利用Shell程序来操作MySQL数据库.
约定: MySQL管理用户为root, 密码为secret.


# vi mysql_opt.sh

#!/bin/sh
#

# 调用方法: mysql_opt $db_name "SQL语句"


sql_user=root
sql_pass=secret
sql_opt="-u$sql_user -p$sql_pass -s"

mysql_opt() {
  db_name=$1
  sql_lan=$2
  mysql $sql_opt << EOF
    USE $db_name;
    $sql_lan;
    QUIT
EOF
}

#
# The file mysql_opt.sh ends here!


这样,就能通过调用mysql_opt函数来对MySQL数据库进行操作.
例: 要查找数据库test_db中test_table表的所有数据


# vi select.sh

#!/bin/sh
#

. ./mysql_opt.sh

echo "Query..."
data=`mysql_opt test_db "SELECT * FROM test_table WHERE 1"`
echo $data
echo "Done!"

#
# The file select.sh ends here!

[root@kevin bin]# ./mysql -u root -p111111 -e "use mysql;select host,user,password from user";
+-----------+------+-------------------------------------------+
&#124; host      &#124; user &#124; password                                  &#124;
+-----------+------+-------------------------------------------+
&#124; localhost &#124; root &#124; *FD571203974BA9AFE270FE62151AE967ECA5E0AA &#124;
&#124; kevin.com &#124; root &#124;                                           &#124;
&#124; 127.0.0.1 &#124; root &#124;                                           &#124;
&#124; localhost &#124;      &#124;                                           &#124;
&#124; kevin.com &#124;      &#124;                                           &#124;
+-----------+------+-------------------------------------------+

****************************************


#!/bin/bash

/usr/local/mysql-5.1.32/bin/mysql -u root -p111111 -e "use mysql;select host,user,password from user";

exit 0;

****************************************


如果需要导出mysql的记录到文本文件:


/usr/local/mysql-5.1.32/bin/mysql -u root -p111111 -e "use mysql;select host,user,password from user into outfile '/home/mysql/aa.txt';"
mysql -u $user -p$password -e "create database test;"


我知道的有如下两种方式可以在shell中访问操作mysql数据库
1. mysql -uusername -ppasswd -e "command;command"

[root@localhost ~]# mysql -uroot -p123456 -e "select user,host from mysql.user"
+------+-----------------------+
&#124; user &#124; host                  &#124;
+------+-----------------------+
&#124; root &#124; %                     &#124;
&#124; root &#124; 127.0.0.1             &#124;
&#124; php  &#124; localhost             &#124;
&#124; root &#124; localhost             &#124;
&#124; root &#124; localhost.localdomain &#124;
+------+-----------------------+
请看下面这段文字:(引自mysql参考手册)
对mysql偶尔有用的另一个选项是-e或--execute选项,可用来将SQL语句传递给服务器。该语句必须

用引号引起来(单引号或双引号)。(然而,如果想要在查询中将值引起来,则对于查询应使用双引号

,查询中引用的值应使用单引号)。当使用该选项时,语句被执行,然后mysql立即退出命令外壳。

例如,你可以用下面的命令获得用户账户列表:

shell> mysql -u root -p -e "SELECT User, Host FROM User" mysql

请注意mysql数据库名作为一个独立的参量传递。然而,相同的查询可能已经使用mysql -u root -p

-e "SELECT User,Host FROM mysql.User"从外壳中执行。

可以按这种方式传递多个SQL语句,用分号隔开:


shell> mysql -u root -p --execute="SELECT Name FROM Country WHERE Name LIKE

'AU%';SELECT COUNT(*) FROM City" world


2. 如果sql语句比较多,可使用如下方式:

[root@localhost ~]# mysql -uroot -p123456 << EOF
> use mysql;
> select user,host from user;
> EOF
user    host
root    %
root    127.0.0.1
php     localhost
root    localhost
root    localhost.localdomain


从查询结果中可以看出,两者的输出结果格式不一样,前一种方式保留了mysql的输出格式。
另外,与此篇文章有关的shell 重定向知识,可以查阅ABS guide第16章节“I/O重定向”和第17章节“Here Documents”

重定向示意:

mysql -uroot -p123qwe <"/opt/sqlinfo.sql" >"a.txt"


自动登录mysql(root:root,passwd:123456),查询test库,test1表里的user=aa的记录.
#!/bin/sh
mysql -uroot -p123456 <use test;
select * from testaa while a=10000;     ###1000 not usr single quote mark,because a is int type,only char type need single quote mark.
EOF
cat /tmp/765469051.txt |grep 2009-12-06|awk '{print $2 "  " $3}'|grep 5|wc
分页: 196/272 第一页 上页 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 下页 最后页 [ 显示模式: 摘要 | 列表 ]