糖炒栗子

cheap to talk,show muscle would be better...

导航

shell琐碎

shell程序的基本特征(解释型语言):

1.所有shell程序第一行都是以#!开头,后面跟上执行此shell程序的shell解释器的完整路径。

2.习惯在程序的第二行以注释的方式写出程序的名称。

3.最简单的shell程序就是一组shell命令的堆砌。

4.shell程序就是普通的文本文件,添加可执行权限后方可执行(chmod +x *.sh)。


shell中的变量分为:局部变量,环境变量,位置变量。

shell是一种解释型语言,与C、JAVA不同,在编程时无需事先声明变量,当对一个变量赋值时也就定义了该变量。局部变量:只在当前的进程和程序中有效的变量。

shell中的变量是无数据类型的,可以使用同一变量存放不同类型的值。变量赋值后只需在变量前加$符号,即可访问变量的值。可用赋值符号(=)为变量赋值,变量的值如果不是带空格的字符串则可不必加引号。变量输出使用的指令:echo。


环境变量:一个用户的所有进程中都可以访问的变量。

export命令查看系统的环境变量列表。

环境变量的访问:需要在一个环境变量前加一个$符号

环境变量的定义:使用export命令定义环境变量,环境变量的名称一般都是大写的。

  export XX=123 此种定义在重新引导系统时会失效。

  echo $XX

在系统配置文件中定义环境变量:上面定义的环境变量,只在当前shell中运行的所有进程中有效。可以在系统配置中加入这些环境变量的定义。在环境变量配置文件/etc/profile中定义两个环境变量:

  export A1=hell

  export A2=123


位置变量:是shell程序在运行时传入的参数。程序中可以用变量的形式来调用这些参数。这些参数存放在1到9的9个特殊的变量名中,被形象的称为位置变量。同普通变量一样,位置变量用前缀$加数字来表示。如:第5个参数,表示为$5。


shell中的不常用的运算符:**对两个变量的幂运算,+=,%=,/=...

  t=`expr $1**$2`(注意反单引号,命令替换)    #用expr改变运算顺序,求x的y次方。($1$2位置变量)

  t=$[t*3]

  s=$[s+t]

(+-*/两边要有空格)


 输入和输出


  echo $str

  echo $str>file    #将结果报错到file中,如果没有文件会新建一个文件。如果已经有文件则会覆盖以前的文件。

  echo $str>>file   #将结果追加到文件file中。

echo输出的内容可以有下面的格式控制字符:

  \c:末尾追加上\c表示这一行输出完毕后不换行。

  \t:输出一个挑个,相当于按下‘tab’键。

  \n:输出一个换行。


 

read:从键盘或文件中读入信息,并赋给一个变量。

如果多个变量时多个变量用空格隔开。

在读取语句后天就<filename,表示从文件中读取数据并赋给变量。


文件重定向:执行命令时指定命令的输入、输出和错误的输出和出入方式。

(修改了默认的数据流向)(输出>、>> 输入<)(标准输入0,标准输出1,标准错误2)

command>filename        把标准输出重定向到一个文件中(会清空原有内容)

command>>filename      追加方式

command 1>filename     标准输出设备编号为1,上面的省略了,其实是等价的

command>filename 2>&1 把标准输出和标准错误一起重定向到一个文件中(2表示标准错误)

command 2>filename    把标准输出的错误重定向到一个文件中

command>>filename 2>&1  把标准输出和标准错误一起追加到一个文件中

command< filename > filename2  把command命令以filename文件作为标准输入,以filename2文件作为标准输出

 command < filename


shell 中的单引号、双引号、反引号、反斜线在命令中的特殊含义。

双引号:引用一个字符串。字符串里不能直接使用$、引号、双引号、反斜线、反引号这些特殊符号。如果字符串里没有空格,则与不使用双引号效果相同。

单引号:引用一个字符串,并忽略特殊符号。如果双引号中再使用单引号,则输出时会输出这个单引号。

双引号要想输出双引号,要用反斜线。单引号的字符串如果要包含单引号,也要用反斜线。字符串中要使用单引号,可以用双引号将其引起来,避免使用反斜线。单引号中使用双引号,也不需使用反斜线。

反引号用于执行引号中的系统命令,并将命令结果返回,返回结果可赋给一个变量。(命令替换)

反斜线对特殊符号转义。

  var1=1000

  echo "hello linux $var1"  

  结果:hello linux 1000

  var1=1000

  echo ’hello linux $var1

  结果:hello linux $var1

  echo "hello "linux""

  结果:hello linux

  echo "hello \"linux\""

  结果:hello "linux"

  echo 'hello "linux"'

  结果:hello "linux"

 


测试语句

对变量大小、字符串、文件属性等内容进行判断。

test 字符串、数字、文件状态等内容的测试。

文件状态测试:文件的权限、有无、属性、类型等内容进行判断。与其他语言不同的是,test命令的测试结果,返回0时表示测试成功。返回1时表示测试失败。

文件状态测试表

-d测试文件是否是目录文件。 -s测试文件是否非空。
-f测试文件是否是正规文件。 -w测试文件是否可写。
 -L测试文件是否是是符号链接文件。 -u测试文件是否有suid位设置。
 -x测试文件是否可执行。 -r测试文件是否可读 。

 数值测试:比较两个数值大小或相等关系,相当c中的比较运算符。shell中的数值测试有下面2种情况。

 1.test 第一个操作数 操作符 第二个操作数

2.用中括号代替test命令。[ 第一个操作数 操作符 第二个操作数 ] 注意括号处有空格。

 数值比较符表

-eq是否相等 -ne是否不等
-le第一个数是否不大于第二个数 -ge第一个数是否不小于第二个数
-gt第一个数是否大于第二个数 -lt第一个数是否小于第二个数

 

 逻辑测试:将多个条件进行逻辑运算,常用作循环语句或判断语句的条件。

三种逻辑测试:-a逻辑与;-o逻辑或;!逻辑非,条件为假时结果为真;

字符串测试:是否相等或为空。

test 字符串 字符串比较符 字符串      [ 字符串 字符串比较符 字符串 ]

test 字符串1  字符串比较符 字符串2       [ 字符串1 字符串比较符 字符串2 ]

字符串比较符:=;!=;-z(测试字符串是空字符串);-n(测试字符串是非空字符串)


流程控制结构


if 条件1

  then 命令1

elif 条件2

  then 命令2

else 命令3

fi

if 条件1;then 命令1

 elif 条件2; then 命令2

 else 命令3

fi

 

 

 

 

 

 

#!/bin/bash

# judge a file is writeable

if test -z $1

  then echo 'please input a file name'

else

  if test -w $1

    then echo "writeable"

  else

    echo "unwriteable"

  fi

  if test -x $1

    then echo "executeable"

  else

    echo "unexecuteable"

  fi

fi


 

for 变量名 in 列表

do

  命令1

  命令2...

done

for char in a s d f g

do

  echo $char

done

for str

do

  echo $str

done

(从位置变量列表读)

 

 

 

 

 

 

 

 

posted on 2012-08-23 10:45  糖炒栗子  阅读(413)  评论(0编辑  收藏  举报