常用的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 有错误返回

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容

  • shell脚本 先开坑,大略地学一下,学习重点放在bash上,有需求再认真的学习细节的内容 Shell 脚本(sh...
    喵喵小阳阅读 408评论 0 1
  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,094评论 1 19
  • 本篇博客只是记录shell的一些关键语法,主要是做一个记录,有些内容也是copy过来的,并不是一个完整的教程,想完...
    疯狂的哈丘阅读 990评论 0 0
  • 创建脚本 可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shel...
    妮妮世界阅读 293评论 0 0
  • 全套学习资料移步至公众号【学神来啦】 本节所讲内容: 19.1 shell基本语法 19.2 SHELL变量及运用...
    侠盗安全阅读 340评论 0 0