cut awk 字符处理 及 shell的一些语法

jackxiang 2009-12-7 16:03 | |
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 同上。

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2309/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]