SHELL基础语法

  • Shell脚本的第一行必须是如下格式:

v#!/bin/sh

符号#!用来指定该脚本文件的解析程序。在上面例子中使用/bin/sh来解析该脚本。当编辑好脚本后,如果要执行该脚本,还必须使其具有可执行属性。

chmod +x filename

shell编程中,所有的变量都由字符串组成

并且不需要预先对变量进行声明,s1:

#!/bin/sh

#set variable a

a="hello world"

# print a

echo "A is:"

echo $a

有时候变量名很容易与其他文字混淆,比如:

S13:

num=2

echo "this is the $numnd“

这并不会打印出"this is the 2nd",而仅仅打印"thisis the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell们要打印的是num变量:

num=2

echo "this is the ${num}nd"

这将打印:this is the 2nd

  • 默认变量
  • $# :传入脚本的命令行参数个数

v$* :所有命令行参数值,在各个参数值之间

留有空格

v$0 :命令本身(shell文件名)

v$1 :第一个命令行参数

v$2 :第二个命令行参数

S2:

#!/bin/sh

echo "number of vars:"$#

echo "values of vars:"$*

echo "value of var1:"$1

echo "value of var2:"$2

echo "value of var3:"$3

echo "value of var4:"$4

运行./s2 1 2 3 4

输出结果:?

  • 局部变量

在变量首次被赋值时加上local关键字可以声明一个局部变量,例s3:

#!/bin/bash

hello="var1"

echo $hello

function func1 {

local hello ="var2"

echo $hello

}

func1

echo $hello

  • 变量(注意)

1.  变量赋值时,“=”左右两边都不能有空格

2.  BASH中的语句结尾不需要分号

  • IF语句

vif [ expression ]

then

#code block

fi

vif [ expression ]

then

#code block

else

#code block

Fi

vif [ expression ]

then

#code block

else if [ expression ]

then

#code block

else

#code block

fi

fi

vif [ expression ]; then

#code block

elif [ expression ]

then

#code block

else

#code block

fi

Fi

  • 比较

比较操作整数操作字符串操作

相同 -eq =

不同 -ne !=

大于 -gt >

小于 -lt <

大于或等于 -ge

小于或等于 -le

为空 -z

不为空 -n

例:

比较整数ab是否相等:if [ $a = $b ] (也可用eq

判断整数a是否大于整数bif [ $a -gt $b ]

比较字符串ab是否相等:if [ $a = $b ]

判断字符串a是否为空:if [ -z $a ]

判断整数变量a是否大于bif [ $a -gt $b ]

注意:

在“[”和“]”符号的左右都留有空格“=”左右都有空格

  • 判断

-e 文件已经存在

-f 文件是普通文件

-s 文件大小不为零

-d 文件是一个目录

-r 文件对当前用户可以读取

-w 文件对当前用户可以写入

-x 文件对当前用户可以执行

S5

#!/bin/sh

folder=/home

[ -r "$folder" ] && echo "Can read $folder"

[ -f "$folder" ] || echo "this is not file"

  • for循环

for循环结构与C 语言中有所不同,在BASH for 环的基本结构是:

for var in [list]

do

#code block

done

$var 是循环控制变量,[list]var 需要遍历的一个集合,do/done对包含了循环体,相当于C 语言中的一对大括号。另外如果dofor 被写在同一行,必须在do前面加上;”。如:

for$varin [list];do

S7:

#!/bin/bash

for day in Sun Mon Tue Wed Thu Fri Sat

do

echo $day

done

v如果列表被包含在一对双引号中,则被认为是一个元素,S8:

#!/bin/bash

for day in "Sun Mon Tue Wed Thu Fri Sat“

do

echo $day

Done

For循环(注意)

上面的例子中,在for 所在那行,变量day 是没有加"$" 符号的,而在循环体内,echo所在行变量$day是必须加上"$" 符号的。

  • while循环

while循环的基本结构是:

while [ condition ]

do

#code block

done

until循环的基本结构是:

until [ condition ]

do

#code block

done

whileuntil的区别在于while是为真时执行,until是为假时执行

  • Case语句

BASH中的case 结构与C 语言中的switch 语句的功能比较类似,可以用于进行多项分支控制。

case"$var"in

condition1 )

;;

condition2 )

;;

*)

default statments;;

esac

S12:

#!/bin/bash

echo "Hit a key, then hit return."

read Keypress

case "$Keypress" in

[A-Z] ) echo " Uppercase letter";;

[a-z] )  echo " Lowercase letter";;

[0-9] )  echo "Digit";;

* ) echo "Punctuation, whitespace, or other";;

esac

  • 关于bash在控制台下的快捷键

ctrl+u 删除光标以前的所有字符

ctrl+d 删除光标以前的一个字符

ctrl+k 删除光标以后的所有字符

ctrl+h 删除光标以后的一个字符

ctrl+t 调换光标前两个字符的次序

ctrl+a 移动光标到最前面

ctrl+e 移动光标到最后面

ctrl+p 上一个命令

ctrl+n 下一个命令

ctrl+s 锁定输入

ctrl+q 解除锁定

ctrl+f 移动光标到后一个字符

ctrl+b 移动光标到前一个字符

ctrl+x 标记一个位置

ctrl+c 清除当前的输入

 

转载于:https://www.cnblogs.com/owenyang/archive/2012/10/12/3579131.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值