C语言DBA_基本Bash语法汇总(汇总)

 2014-06-26 Created By
BaoXinjian

C语言 1一、变量


1、变量命名可采用英文字母、数字与下划线,必须为英文字母开头,区分轻重缓急写。

2、每个shell都有着和谐之变量定义,彼此相互免影响。

3、变量直接盖相当于号赋值,注意等号两度不足留空,若当号右侧有空格,赋值要就此引号括起来。

例如:

test=1

test=’hello world’

4、通过以变量名前加$的方法赢得变量的价。或者以${变量名}的款式,以好变量名和紧接其后的假名或下划线进行区分。

例如:${test}

5、通过${#变量}的花样取得变量值字串的长短。

例如:test=’12345′;echo ${#test}  
#输出5

6、可以用变量声明也全局变量,全局变量作用范围包含有shell。命令为:export
变量名

例如:export test

7、使用unset注销变量,需要小心的是收回就局限为目前shell,即使全局变量也同等。unset
-v 变量名

例如:unset test

8、清空变量的法门:变量名=

例如:test=

9、数组变量

行使变量名=(成员值1 成员值2
…)的款型赋值,成员值之间为空格分隔。

例如:$testarray=(1 2 ‘abcd’ 38)

往往组值获取使用$变量名[下标]的形式,下标从0计数。

例如:$testarray[2]

通过${变量名[@]}或${变量名[*]}可以落数组所有成员,区别是,前者是各成员单独输出,后者是将兼具成员为一个字符串的款型总体出口。

通过${#变量名[@]}或${#变量名[*]}可以赢得数组成员数。例如:${#testarray[@]}。

用留意unset某个数组成员后,此成员的下标并无移除。

例如:

testarray=(1 2 3 4 5 6)

unset testarray[2]

echo testarray[2]    #不论价值输出

echo testarray[3]    #输出4

数组可以动态增长成员,例如:testarray=($testarray[@]
7);

倘若数组下标也是变量,则应用{}将数组变量括起来,例如:i=1;echo
${testarray[$i]}

10、使用readonly可以声明一个变量为单读属性。

例如:

readonly test 
#宣示test变量为就念

readonly -f testfunc 
#扬言testfunc函数为才念

readonly -a testarray 
#声明testarray数组为单独读

11、bash
shell可以经过declare进行变量声明。

例如:

declare -a testarray 
#概念一个数组变量

declare -i test   
#概念一个整型变量

declare -r test   
#概念一个单单念变量

declare -t test   
#设定变量具有trace属性

declare -x test   
#概念一个环境变量

12、shell提供平等组命令检测变量是否在或者是否也空,根据检测结果实施相应操作,列表如下:

${变量:-字串} 
如果变量是都有价,返回变量值,否则回字串内容。

${变量:=字串} 
如果变量是都发生价,返回变量值,否则用许串赋给变量,并返回字串内容。

${变量:?字串} 
如果变量是且有价,返回变量值,否则显示将字串作为错误信息显示,并脱离script执行。

${变量:+字串} 
如果变量是都发出价,返回字串内容,否则回空值。

流淌:去丢命令中之:,则只有检测变量是否有,不检测是否也空。

13、变量可以经过${变量:起始位置:截取长度}的款式,过行取子串操作。如果起伊始位置获取到字串尾,则截取长度可以省略。

例如:

test=”123456789″

echo ${test:1:3}    #输出234

echo ${test:2}    #输出3456789

14、变量可以透过命令对那个配串值进这行删除替换处理,列表如下:

${变量#匹配式}  
根据匹配式从漏洞百出最缺乏匹配子串并删除。

${变量##匹配式}  
根据匹配式从左贪婪匹配子串并删除。

${变量%匹配式}  
根据匹配式从右边最缺乏匹配子串并删除。

${变量%%匹配式}  
根据匹配式从右边贪婪匹配子串并删除。

${变量/匹配式/替换串}  
根据匹配式从左匹配第一身长串替换成替换串。

${变量//匹配式/替换串}  
根据匹配式匹配有子串替换成替换串。

${变量/#匹配式/替换串}  
根据匹配式从左匹配第一身长串替换成替换串。

${变量/匹配式/}  
根据匹配式从左匹配第一身长串并去。

${变量//匹配式/}  
根据匹配式从右侧匹配有子串并去。

${变量/#匹配式/}  
根据匹配式从左匹配第一个头串并去。

${变量/%匹配式/}  
根据匹配式从右侧匹配有子串并去。

15、利用eval实现动态变量功能,动态变量的变量名由其余一个变量的价构成。

示例:

#设n1转移量之价值为另外一个变量的号

n1=”n2″

#深受动态变量n2赋值

eval ${n1}=abc

echo “$n1=$n2”    #输出n2=abc

#因动态方式拿动态变量n2的值赋给变量t

eval t=\$${n1}

echo “t=$t”   #输出t=abc

 

C语言 2亚、
常用系统变量


1、$0

现阶段行之shell
script文件称(带完整路径)

2、$1 ~ $n

各个存放shell
script的通令执行参数,数值过9时必要因此{}括起来,比如${10}。

令执行参数可以透过shift命令进行运动操作,位置参数根据shift命令指定的数值为前方走,如不点名移动值,则运动1蹩脚。例如:

#!/bin/bash

echo “所有入参:$@”

while shift

do

  [ -n “$1” ] && echo $1

done

3、$*

以享有命令执行参数做为一个字符串存入此变量。

4、$@

以有所命令执行参数做为一个字符串数组,每个参数为一个分子变量,存入此变量。

5、$#

一声令下执行参数的个数。

6、$?

及同一久命令执行后底返回码。

7、$$

当下实施之shell script进程编号。

8、$!

达到一个后台程序的进程编号。

9、$_

script执行时,存放bash的绝对路径。

bash交互时,存放上一个命令最后一个指令执行参数。

邮件检测时,存放邮件文件称。

 

C语言 3其三、常用内置命令


1、echo

显示信息,自动换行

echo -n

取消活动换行

echo -e

许串中决定符生效,比如\n

echo显示的消息一旦含有空格则动用单引号或双引号括起来。

故此双引起号括起来的情节,会指向其中的变量取值、运算式计算结果、获取命令执行结果、转义符进行转义后再次出口。

单引号对括起来内容无开另外移直接出口。

例如:echo “it’s me” #输出 it’s
me

test=lykyl;echo ‘$test’ #输出
$test

只要显示信息包括变量则收获变量值后更跟字串组合后显示。

例如:test=lykyl;echo “hello $test” 
#输出 hello lykyl

设若确实如出口$字符,可以经转义符或以配串用单引号括起来。

例如:test=lykyl;echo -n ‘hello
$test’;echo “\$test”  #输出 hello $test $test

2、:

回传0

3、eval

剖析字串参数,以命形式实行

4、source

当手上shell中履行指定shell程序。

例如:source func.sh

6、read

read 变量名

博用户输入,并将输入内容存入命令后的变量中。如果无点名变量,则默认存入REPLY这个变量中。

read -p ‘提示信息’ 变量名

亮提示信息后,等待用户输入。

read -a 变量名

收受以空格分隔的一律组值,存入指定的变量中。

read -r 变量名

read命令默认去丢转义字符前面的反倒斜杠,例如,输入\n存入变量后只有n。增加-r选项后,read命令将受转义字符,不举行过滤。

read -t 等待时长 变量名

安装read等待输入的时长,超时后read将回到一个非零值。

read -s 变量名

潜伏用户输入内容在屏幕及之回显。

7、exec

exec 命令

执行命令,取代目前shell。

exec < 文件名

转折输入,将通过正规输入读取数据的措施改为由指定文件获取。

8、eval

执行命令后面参数组合成的下令。

例如:

showfile=’/etc/passwd’

eval “cat $showfile”

9、expr

归来算术运算式的价,需要专注运算式元素中应因空格分隔,遇到跟系统控制符冲突的操作符要加转义。

例如:

expr 1 + 1

expr 2 \* 3

 

**C语言 4四、函数**


1、基本格式

function 函数名()

{

  命令

  … …

}

2、基本用法

重要词function和函数名后的括号可以独自省略,但不得同时概括。

默认为最后执行命令的回值代表函数的返回码。可以使用return命令立即终止函数执行,并因return后指定的价值做啊返回码。如果return未依定值,则回回0。

函数需要在首蹩脚调整用前定义,建议以先后太前方定义。

得以函数统一定义在独立文件中,再为source或.
(注意.后面来空格)的形式被其他程序调用。为了不来冲突,建议函数包着定义之函数称以下划线开头。

函数内有些变量应以local关键词定义。

函数直接为函数称呼调用,如需要传入参数则当函数名加空格后跟写,多单参数为空格分隔。

函数使用及$n的形式调用传入的职参数,此时主程序的岗位参数不让影响。

函数定义后支持动态调用。

例如:

func.sh

#!/bin/bash

_testfunc()

{

  if (( $1 > $2 ));then

    echo “$1 > $2”

  elif (( $1 == $2 ));then

      echo “$1 = $2”

    else

      echo “$1 < $2”

  fi

  return 10

}

 

main.sh

#!/bin/bash

. func.sh

_testfunc 32 24

_testfunc 15 15

_testfunc 1 12

#动态调用示例

s=”_testfunc”

`$s 12 12`

 

C语言 5五、流程控制命令


1、if 条件转向命令

1.1 基本格式:

if 命令A

then

  命令

  …

else

  命令

  …

fi

1.2 嵌套格式:

if 命令A

then

  命令

  …

elif 命令B

then

  命令

  …

elif 命令C

then

  命令

  …

fi

如果if后面与的通令执行回来回码为0则行then后面的命,否则执行else后面的吩咐。

if和then可以停放一行,前提是if后以及的指令加分声泪俱下最后。

例如:

if test -r /etc/passwd; then cat
/etc/passwd; fi

2、case条件选择命令

基本格式:

case 变量 in

 匹配串1)

   命令

   …

   ;;

 匹配串2)

   命令

   …

   ;;

  … …

  … …

 匹配串n)

   命令

   …

   ;;

 *)

   命令

   …

   ;;

esac

匹配串的格式:

仅字符串  完全配合。


任意长度的任意字串,包括空串。例如:j*k,匹配jack、jak。


单个字符。例如:j??k,匹配jack,但不般配配jak。

[]
字符集.例如:[a-c]OK,匹配aOK、bOK、cOK。


匹配多独相当配串。例如:j??k|[a-c]OK|jak。

一旦打开extglob选项,则会支撑高级匹配。shopt -s
extglob

?(匹配串)
匹配0单或1单括号里之匹配串。

*(匹配串)
匹配0独以上括号里的匹配串。

+(匹配串) 匹配1单括号里之匹配串。

@(匹配串)
匹配括号里的配合串其中的同等项。

!(匹配串) 匹配非括号里之匹配串。

3、for循环命令

3.1 基本格式1:

for 变量 in IFS分隔符定义的字串

do

  命令

  …

done

3.2 处理为主字串:

for i in 1 2 3 4 5 6 7 8 9

do

  echo $i

done

3.3 从文本取串处理:

for i in $(cat /etc/passwd)

do

  IFS_old=IFS

  IFS=’:’

  for j in $i

  do

    echo “$j “

  done

  echo
“—————————“

  IFS=IFS_old

done

3.4 以对接配符遍历目录:

for i in /etc/*

do

  if [ -f “$i” ]; then

    echo “$i 是文件”

  fi

done

 

3.5 基本格式2:

for
((初始化;结束条件判断;参数变更))

do

  命令

  …

done

此格式类似C语言,具体定义不再阐述。仅举无异于规章

for
((i=1,j=1;(i+j)<=100;i=i+1;j=j+1))

do

  echo “$i,$j”

done

4、while循环命令

4.1 基本格式:

while 条件判断

do

  命令

  …

done

当极符合条件判断式时实行循环体。

4.2 基本用:

i=0

while (($i<10))

do

  echo $i

  i=$(($i+1))

done

4.3 从文本读取内容:

while read line

do

  echo $line

done < “/etc/passwd”

4.4 无限循环:

while :

  do

    sleep 5

  done

5、until循环命令

基本格式:

until 条件判断

do

  命令

  …

done

当规则不符合条件判断式时实行循环体。

6、select菜单选择命令

核心格式:

select 变量 in
IFS定义的隔符分隔的配串行

do

  命令

  … …

done

 

将配串以IFS定义之相间符为界分解成几件,编号后列表显示输出,并拿环境变量PS3定义的内容作精选提示称显示。根据用户选择进行对应的操作。

例如:

PS3=”请您选择:”

select sel in “测试 1” “测试选择2”
“测试选择 3” “退出选择”

do

  case $sel in

    “测试 1”)

      echo “测试 1”;;

    “测试选择2”)

      echo “测试 2”;;

    “测试选择 3”)

      echo “测试 3”;;

    *)

      break

      ;;

  esac

done

7、break命令,中止并跳出当前循环体。

8、continue命令,直接收此轮循环,继续下轮循环。

9、条件判断命令

法判断命令是同流程控制语句配合下的指令。

令格式: test 条件判断式

回来条件判断式的价值,条件建立返回0,否则回非0值。

常备以[ 条件判断式
]的格式代替test命令,注意尺度判断式与[]要来空格分开。

介入判断的变量必须就初始化且非空。

例如:[ -e ~/.bashrc ]

9.1 条件判断支持复合条件判断:

A、与判断

使用&&分隔两长判断命令。

例如:[ -e ~/.bashrc ] && [ ~/.bashrc
-nt /etc/passwd ]

B、或判断

利用||分隔两漫漫判断命令。

例如:[ -e ~/.bashrc ] || [ ~/.bashrc
-nt /etc/passwd ]

C、非判断

使用!符号进行非判断。

例如: ![ -e ~/.bashrc ]

9.2
条件判断式包括数值判断、字串判断、文件判断与复合判断四类操作,分别定义如下:

A、数值判断

[ n1 -eq n2 ]   #判断n1==n2

[ n1 -ge n2 ]   #判断n1>=n2

[ n1 -gt n2 ]   #判断n1>n2

[ n1 -le n2 ]   #判断n1<=n2

[ n1 -lt n2 ]   #判断n1<n2

[ n1 -ne n2 ]   #判断n1!=n2

留意:数值判断单独支持整型。

B、字串判断

[ str1 = str2 ]   

[ str1 != str2 ]   

[ str1 < str2 ]   

[ str1 > str2 ]   

[ -n str1 ]   #认清str1尺寸是否非0 
 

[ -z str1 ]  
#看清str1长度是否为0  

流淌:如果字串有空格,应以该之所以引号括起来。

C、文件判断

[ -d file ]  
#判定目录file是否留存

[ -e file ]   #认清file是否存在

[ -f file ]  
#判断文件file是否在

[ -r file ]  
#判定file是否是并可读

[ -s file ]  
#看清file是否留存并非空

[ -w file ]  
#判定file是否在并而写

[ -x file ]  
#认清file是否是并不过实施

[ -O file ]  
#判断file是否存在并属于即用户

[ -G file ]  
#看清file是否有且默认组于目前用户所属组是否同样

[ file1 -nt file2 ]  
#判断file1是否比file2新

[ file1 -ot file2 ]  
#判断file1是否比file2旧

D、复合判断

-a  与操作,例如:[ -e file -a -r file
]

-o  或操作,例如:[ -e file -o -r file
]

格判断好经过(())使用规范数学运算符进行数值赋值运算和判断。

例如:

test=3

if (( $test * 3 > 1 ));then

  echo $test

else

  echo $(( ++test ))

fi

准判断好通过[[]]替test进行字串比较,同时还提供了正则相当功能。注意判断式和[[、]]以及运算符之间如果用空格分隔。

例如:

test=”aaabbb123″

if [[ $test == ‘a*’ ]];then

  echo ok

fi

 

Thanks and Regards

参考: lykyl –
http://www.cnblogs.com/lykyl/archive/2013/02/15/2912764.html

C语言 6