常用的shell脚本语法学习

一、给文件添加权限

chmod + r + 文件名 给该文件增加可读的权限chmod + w + 文件名 给该文件增加可写的权限chmod + x + 文件名 给该文件增加可执行的权限

./文件名  执行该文件

二、Shell变量

*shell的变量按照变量的作用可以分为4类:

1.环境变量:主要保存与环境相关的参数

2.用户自定义变量:用在脚本内表达运行过程中数据

3.位置参数变量:用来向脚本中传递参数,变量名不能自定

4.预定义变量:是bash中已定义的变量,按照变量的作用范围可以分为2类:

1.全局变量:是环境变量,其值不随shell脚本的执行结束而消失

2.局部变量:shell程序内部定义的,其使用范围仅限于定义 它的程序,包括用户自定义变量、位置变量和预定义变量。


一、自定义变量

定义变量 变量名 = 变量值 如:num = 10

引用变量    $变量名              如:i = $num  把变量num的值付给变量i

显示变量    使用echo命令可以显示单个变量取值    如:echo $num清除变量    使用unset命令清除变量    如:unset num

二、读取变量

read string 从键盘输入一个字符串赋值给变量string,若string没定义,则先定义再使用。

readonly string = 100  定义一个只读变量,只能在定义时初始化赋值,

以后其值不能改变,不能被清除。export STRING = 300  使用export说明的变量,会被导出为环境变量。其他shell均可使用。

三、注意事项

1.变量名只能是英语字母、下划线、数字。开头不能是数字

1_num = 10  错误

num_1 = 10  正确2.等号两边不能直接接空格符,若变量中本身就包含了空格,

则整个字符串都要用双引号、或单引号括起来;双引号内的特殊字符(即 $变量)

可以保留变量的特性,但是单引号内的特殊字符则仅为一般的字符,没有特殊意义。

name=aa bb //错误name="aa bb" //正确echo "$nameis me" //输出:aa bb is meecho "$nameis me" //输出:$name is me

四、环境变量

》shell在开始执行时就已经定义了一些和系统的工作环境有

关的变量,我们在shell中可以直接使用$name引用

》定义:

一般在~/.bashrc或/etc/profile文件中(系统自动调用的脚

本)使用export设置,允许用户后来更改

VARNAME = value ;export VARNAME

》传统上,所有环境变量均为大写

》显示环境变量

使用env 命令可以查看所有的环境变量。

》清除环境变量

使用unset 命令清除环境变量

常见的环境变量:

HOME 用于保存注册目录的完全路径名

PATH 用于保存用冒号分隔的目录路径名,shell将按PATH变量中给出的顺序搜索这目录,

找到的第一个与命令名称一致的可执行文件将被执行

PATH=$HOME/bin:/bin:/usr/bin;export PATH

HOSTNAME 主机名

SHELL 默认的shell命令解析器

LOGNAME 此变量保存登录名

PWD 当前工作目录的绝对路径名

······

五、预定义变量

预定义变量:

$# 传给shell脚本参数的数量

$* 传给shell脚本参数的内容

$1、$2、$3、...、$9 运行脚本时传递给其的参数,用空格隔开

$? 命令执行后返回的状态,"$?"用于检查上一个命令是否正确

(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错)

$0 当前执行的进程名

$$ 当前进程的进程号,"$$"变量最常见的用途是用作临时文件的名字以保证临时文件不会重复

""(双引号):包含的变量会被解释

''(单引号):包含的变量会当做字符串解释

``(数字键1左面的反引号):反引号中的内容作为系统命令

,并执行其内容,可以替换输出为一个变量

\ 转义字符:

同c语言 \n \t \r \a等 echo命令需加-e转义

(命令序列):

由子shell来完成,不影响当前shell中的变量

{ 命令序列 }:---注意:“{”、“}”前后有一空格

在当前shell中执行,会影响当前变量


三、条件测试语句

1.test命令:用于测试字符串、文件状态和数字

2.test命令有两种格式:

test condition 或[ condition ]

使用方括号时,要注意在条件两边加上空格

测试文件状态的条件表达式

-e 是否存在-d 是目录-f 是文件-r 可读-w 可写-x 可执行-L 符号连接-c 是否字符设备-b 是否块设备-s 文件非空


[ str_operator “str” ]

[ “str1” str_operator “str2”]

》其中str_operator可以是:

= 两个字符串相等

!= 两个字符串不相等

-z 空串

-n 非空串

test num1 num_operator num2

[ num1 num_operator num2 ]

》*num_operator可以是:

-eq 数值相等

-ne 数值不相等

-gt 数1大于数2

-ge 数1大于等于数2

-le 数1小于等于数2

-lt 数1小于数2

命令执行控制:

&&:

command1 && command2

&&左边命令(command1)执行成功(即返回0)shell才执行&&

右边的命令(command2)

|| command1 || command2 ||左边的命令(command1)未执行成功(即返回非0)shell才 执行||右边的命令(command2)

四、控制语句 if case for while until break

if [条件1];then 

 执行第一段程序

else 

 执行第二段程序

fi

if [条件1];then

执行第一段程序

elif [条件2]then

执行第二段程序

else

执行第三段程序

fi

case $变量名称in

“第一个变量内容”)

    程序段一

    ;;

“第二个变量内容”)

    程序段二

    ;;

*)

    其它程序段

    exit 1

esac

for (( 初始值; 限制值; 执行步阶))

do   

程序段

done

for var in con1 con2 con3 ...

do

程序段

done

第一次循环时,$var的内容为con1

第二次循环时,$var的内容为con2

第三次循环时,$var的内容为con3

......

while [ condition ]

do 程序段

done

当condition成立的时候进入while循环,直到condition不成立时才退出循环。

until [ condition ]

do 程序段

done

这种方式与while恰恰相反,当condition成立的时候退出循环,否则继续循环。

break  跳出本次循环

continue  跳过这个循环步骤

五、函数

函数名() {

命令 ...

}

function 函数名() {

命令 ...

}

调用函数的格式为:

  函数名 param1 param2……

使用参数同在一般脚本中使用特殊变量

$1,$2 ...$9一样

函数可以使用return 提前结束并带回返回值

return 从函数中返回,用最后状态命令决定返回值。

return 0 无错误返回

return 1 有错误返回

你可能感兴趣的:(常用的shell脚本语法学习)