shell脚本--(符号和语法)

shell脚本linux

shell脚本:一直都在用,可是没有系统的学习过,只是在linux命令行模式敲一些简单的经常使用的指令,如今系统的学习一番。
正则表达式


1、建立shell脚本,通常以.sh结尾(linux下后缀只是种显示,没有任何具体含义)文件建立后须要chmod 0755 name 给它加上权限,以后就能够用./运行了shell

进入文件须要在最顶部加上shell脚本解释器,这个文件中的全部命令都会被bash拿到去解释。下面会说到shell的工做模式。bash


2、shell的工做模式;ide

我是这样理解的当咱们在脚本中写这样一段程序的时候函数

#!/bin/bash
ls

这个时候shell是这样去解释的,当前shell(bash)会fork一个子bash去得到这个脚本中的全部命令,而后到ls这一行的时候,sh会再fork一个新的bash去execv这个ls可执行程序,以后将等待的结果输出到当前终端上。工具

shell的命令分两种,一种是内部命令,一种是shell可执行的应用程序,当执行内部命令的时候frok的子bash就会在它的空间内执行这条命令。学习



3、shell脚本中的一些常见符号:spa

1>简单符号命令行

  1 #!/bin/bash
  2 #shell中用#做为注释
  3 count=1            #变量的定义不用声明类型,shell解释器会帮你去作
  4 val=0
  5 echo $count        #$符号用来取变量的值
  6 
  7 echo ${count}t     #建议加上{}由于有时候你会像这样去输出 
  8 
  9 val=$(date)     #$()的做用是命令替换,这行代码的意思就是将date的命令输出信息传给val
 10 echo $val        
 11 
 12 val=`date`       #``反引号的做用和$()同样都是命令替换,不一样的是``中不能再用``
 13 echo $val        
 14 
 15 echo 'val'       #''单引号的做用是保持字符串自己的意思,但它里面不能再有字符串了
 16 
 17 echo "va'l'"      # ""和单引号的不一样在于它的里面能够有字符串''                                                                                                                                                           
                                                                                                                       6,0-1        所有

2>意义符号


[ ]中括号的意思是一个判断语句注意[是一个命令因此后面要加空格,也能够用test命令。例如

 19 val=10
 20 
 21 test $val -eq 12   #test命令的书写格式,判断val的值是否等于12
 22 echo $?              
 23 [ $val -eq 10 ]   #[ ]命令的书写格式
 24 echo $?
 25 [ $val -eq 11 ]
 26 echo $?
 27 
 28 
                                                                                                             
                                                                                                                                            20,0-1       底端

echo $?的意思是拿到上一个执行语句的退出码,它的返回值成功为0失败为1。


3>shell下的比较命令;


-eq;等于

-ne;不等于

-lt;小于

-le;小于等于

-gt;大于

-ge;大于等于


另外的经常使用比较命令

-d 判断目录是则为真

-f 判断是文件则为真


逻辑与 -a  [ $val -gt 10 -a $val -lt 100] 大于10小于100的数

逻辑或 -o  [ $val -eq 10 -a $val -eq 100] 等于10或等于100的数

取反 !   [ $val -eq 10 -a $val -eq 100] 不等于10或不等于100的数



4、特殊变量

$0:至关于C语言main函数的argv[0]

$一、$2...

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

$#

至关于C语言main函数的argc - 1,注意这里的#后面不表示注释

$@

表示参数列表"$1" "$2" ...,例如能够用在for循环中的in后面。

$?

上面已经提过

$$

显示当前shell的进程号

wKioL1dspoXiXJEDAAB5cUwN_2s115.png


能够看出和c不一样的地方在于,它的arcg->$#只输出不包括./这一列。


shift命令能够将位置左移,例如上面的程序加上shift 2后,$1的输出则是one了,shift 1为默认不移动的值




5、常见符号的区别

1> [[双中括号和[单中括号的区别


wKioL1dsqnOj_tRLAABJ0bqol-I469.png

[[中能够用 == ! && || 正则表达式进行判断,可是上面的结果显然有问题,[[ 在&& ||判断的时候很难判断正确


2> ``与$()

#$()的做用是命令替换,这行代码的意思就是将date的命令输出信息传给val
#``反引号的做用和$()同样都是命令替换,不一样的是``中不能再用``


3> (())与let


(())和let均可以进行运算,基本能够互换的


((val++))

let val++



6、shell语法


while循环;

  1 #!/bin/bash
  2 
  3 val=0
  4 while [ $val -lt 10 ]
  5 do
  6     echo $val
  7     let val++
  8 done
  9  #注意do done的书写                                                                                                                   4,1          所有

if判断:

  1 #!/bin/bash
  2 
  3 val=10
  4 
  5 if [ $val -eq 10 ];
  6 then
  7     echo $val
  8 fi
  9 # if [] ; fi 的格式
                                                                                                                                                            
                                                                                                                    5,1          所有

for语句:

两种写法 

  
  2 #写法一
  3 val=0
  4 
  5 for val in {0..100}
  6 do
  7     echo $val
  8 done
  9 #写法二
  10 val=0
  11 for (( val; val<=100 ;val++))
  12 do
  13     echo $val
  14 done
                                                                                                                                                            
                                                                                                                                       12,2         所有

switch case:


  1 #!/bin/bash

  2 

  3 read i

  4 

  5 case $i in

  6     a)

  7     echo 'a'

  8     ;;

  9     b)

 10     echo 'b'

 11     ;;

 12 esac




总结:shell脚本是类c风格的,shell的特色在于它有不少工具,这些工具会在后面的博客中详解。

相关文章
相关标签/搜索