shell脚本学习笔记之常见语法结构用法

一,变量

1.变量赋值和替换

语法:variable=value

variable=“value1 value2”

echo  $variable/$"{variable}"   屏幕上显示赋值

echo  $"{variable+b}"  将已经赋值的变量重新设值,临时生效

echo  $"{variable:=value} 屏幕上显示value(前提是value没有被赋值)

echo  $"{variable:-value} 屏幕上显示value(value未被赋值,value临时赋值)

echo  $"{variable?}"  用于查看变量是否被赋值,赋值是什么

设置只读变量(查看所有的只读变量用readonly即可)

variable=value

readonly=value   任何用户不允许对变量variable重新设置变量或unset变量

declare/typeset

2.无类型shell变量

*****shell不需要声明变量类型,通过上下语句来自动识别,只支持整型和字符型

默认为字符型,如果没有给变量赋值而带入到语句中,会根据上下文自动给变量赋值,默认为空(字符),如果上下文分析出为一个算法,

则将变量赋值为0

3.环境变量

3.1定义和清除变量

定义环境变量的基本格式

ENVIRON-VARIABLE=value

声明环境变量

export  ENVIRON-VARIABLE

例子:

[[email protected] ~]# export APP

[[email protected] ~]# echo "APP"

[[email protected] ~]# echo "$APP"

/usr/local

查看所有的环境变量 env

unset清除环境变量

3.2 重要环境变量

PWD/OLDPWD

在PATH中添加新目录

export PATH="/new directory":$PATH

HOME

echo $HOME  显示当前用户的家目录

SHELL

USER和UID   当前用户

PPID   进程号

PS1和PS2

IFS 指定域分隔符

3.环境变量配置文件

.bash_profile   作用于用户登录后启动的shell(可以执行配置文件中登录后的命令)

.bashrc         作用于子shell(子shell中使用的命令,)

.bash_logout    作用于注销时执行配置文件中的命令

父进程 子进程

环境变量和本地变量的异同点

环境变量的父shell可以向子shell传递

本地变量的父shell 不能传递

而环境变量和本地变量的子shell都不能向父shell进程传递

_____________________________________________________________________

[[email protected] scripts]# cat father.sh

#!/bin/bash                                                          |

#输出父进程号

echo "Father Process ID is $$"

|

#定义本地变量并输出                                                  |

localvar="Define a local variable."

echo "localvar=$localvar"                                            |

#定义环境变量并输出

ENVVAR="Define a environment variable."

export ENVVAR

echo "ENVVAR=$ENVVAR"

#调用child.sh脚本,即创建子进程

$PWD/child.sh

#child.sh执行完毕,输出相关变量值

echo "Return to father process: $$"

echo "localvar=$localvar"

echo "ENVVAR=$ENVVAR"

[[email protected] scripts]# cat child.sh

#child.sh:该脚本输出自身进程号及父进程号、重新定义本地变量和环境变量

#!/bin/bash

#输出自身进程号及父进程号

echo "Chile Process ID is $$"

echo "My Father Process ID is $PPID"

#输出本地变量和环境变量的当前值

echo "localvar=$localvar"

echo "ENVVAR=$ENVVAR"

#重新定义本地变量和环境变量

localvar="Redefine this ocal variable."

ENVVAR="Redefine this environment variable."

echo "localvar=$localvar"

echo "ENVVAR=$ENVVAR"

[[email protected] scripts]# ./father.sh

Father Process ID is 5429

localvar=Define a local variable.

ENVVAR=Define a environment variable.

Chile Process ID is 5430

My Father Process ID is 5429

localvar=

ENVVAR=Define a environment variable.

localvar=Redefine this ocal variable.

ENVVAR=Redefine this environment variable.

Return to father process: 5429

localvar=Define a local variable.

ENVVAR=Define a environment variable.

_____________________________________________________________________

4.参数

$N     赋值变量

$#     变量个数

$*/[email protected]  列出所有变量

$$     执行的shell进程号

$?     显示是否错误0/1

__________________________________________________

[[email protected] scripts]# ./a.sh a b c d e f j

the scripts is ./a.sh

the part1 #1 a

the part2 #2 b

all parts a b c d e f j

the pats are 7

the error 0

the shell process 4898

[[email protected] scripts]# cat a.sh

#!/bin/bash

echo "the scripts is $0"

echo "the part1 #1 $1"

echo "the part2 #2 $2"

echo "all parts $*"

echo "the pats are $#"

echo "the error $?"

echo "the shell process $$"

_________________________________________________

==========================================================================

二、引用

"" 引用除$,`,\外所有字符

‘‘ 引用所有字符

`` shell解释为系统命令

\ 转义符,即屏蔽下一个字符的特殊意义

1. 全引用和部分引用

”“  ‘’

2.命令替换

`linux命令`

$(linux命令)

需要理解 x y  ”x y“

``和$()的区别

3.转义符

在使用echo时

$‘‘=-e

a=1

a="1 2”

**************************************************************************

$?

0表示运行成功

非0表示失败

echo $? 0或其他------  用于测试判断语句

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

三.退出状态

1.测试结构

test

格式:test expression

2.整数比较运算符

整数比较------  用于测试判断语句或循环语句

-eq

le

ge

lt

gt

ne

3字符串运算符----- 用于测试用户输入是否为空或比较字符串变量

string 测试string是否不为空

-n string 测试是否不为空

-z string 测试是否为空

string1=string2 测试string1和string2是否相等

sring1!=string2 测试string1和string2是否不相等

格式 [ "string1" =/!=  string2 ]

4.文件操作符

file 为目录,文件,或文件路径

-d file  测试file是否为目录

-f       测试file是否存在

-r 测试file是否为普通文件

-s       测试file是否是进程可读文件

-w      测试file是否是进程可写文件

-x       测试file是否是进程可执行文件

-L        测试file的长度是否不为0

-e       测试file是否符号链接

格式 [ -d file ]

逻辑运算符

!expression 非    如果为假,则test为真

expression1 -a expression2 与    如果都为真,则test为真

expression1 -o expression2 或    如果有一个为真,则test为真

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

三.判断

1.简单的if结构

if expression

then

command

command

...

fi

2.exit命令

exit status

3.if/else结构

if expression1

then

command

...

command

else

command

...

command

fi

4.if/else嵌套语句

if expression1

then

if expression2

then

command

command

...

else

command

command

...

fi

else

if expression3

then

command

command

...

else

command

command

...

fi

fi

5.if/elif/else结构

if expression1

then

command

command

...

elif  expression2

then

command

command

...

elif expresionN

then

command

...

command

else

command

...

command

fi

6.case结构

caase variable in

value1)

command

...

command;;

value2)

command

...

comand;;

...

valueN)

command

...

command;;

*)

command

...

command;;

esac

++++++++++++++++++++++++++++++++++++++++++++++++++++

四、运算符

1.算术运算符

运算符            举例            结果

+(加运算)         3+5            8

-(减运算)         5-3            2

*(乘运算)         5*3 15

/(除运算)         8/3            2

%(取余运算)       15%4           3

**(幂运算)       5**3           125

算术复合赋值运算符

运算符     举例           等价表达式

+=         v+=5          v=v+5

-=         v-10          v=v-10

*=         v*=5          v=v*5

/=         v/=3          v=v/3

%=         v%=5          v=v%5

2.位运算符

运算符                 举例                解释或value值

<<(左移)           value=4<<2             4左移2位,value值为16

>>(右移)           value=8>>2             8右移2位,value值为2

&(按位与)          value=8&4              8按位与4,value值为0

|(按位或)          value=8|4              8按位或4,value值为12

~(按位非)          value=~8               按位非8,value值为-9

^(按位异或)        value=10^3             10按位异或3,value值为9

复合运算符

运算符         举例                     等价表达式

<<=           value<<=2                 value=value<<2

>>=           value>>=2                 value=value>>2

&=            value&=4                  value=value&4

|=            value|=4                  vale=value|4

^=            value^=3                  value=value^3

4.自增自减运算符

++++++++++++++++++++++++++++++++++++

循环

1.列表for循环

for variable in {list}

do

command

command

...

done

2.不带列表for循环

for variable

do

command

command

...

done

3.类c风格的for循环

for(( expr1;expr2;expr3 ))

do

command

command

...

done

++++++++++++++++++++++++++++++++++++++++

while循环

while expression

do

command

command

...

done

1.计数其控制的while

couter = 1

while expression

do

command

...

let command to operate counter

command

...

done

2.结束标记控制的while循环

read variable

while  [[ "$variable" != sentinel ]]

do

read variable

done

3.标志控制的while循环

signal=0

while (( singal !=1 ))

do

...

if expression

then expression

signal=1

fi

...

done

4.命令行控制的while循环

while [[ "$*" != ""]]

do

echo "$!"

shift

done

while [[ "$#" -ne 0 ]]

++++++++++++++++++++++++++++++++++++++++++++++++++++++

until循环

until expression

do

command

command

...

done

时间: 2024-10-16 21:08:25

shell脚本学习笔记之常见语法结构用法的相关文章

shell脚本学习笔记 (sed的高级用法----模式空间和保持空间)

前段时间在学习shell脚本,上次有提到sed的模式空间和保持空间概念,但是一直没有研究好,这两天研究了一下,所以将它发出来,不是很全面,仅仅供大家参考一下. 保持空间sed在正常情况下,将处理的行读入模式空间,脚本中的"sed command(sed命令)"就一条接着一条进行处理,直到脚本执行完毕.然后该行被输出,模式被清空:接着,在重复执行刚才的动作,文件中的新的一行被读入,直到文件处理完毕. 模式空间可以比喻为一个生产线,而保持空间则可以被比喻为仓库,这个比喻希望可以帮助大家理解

shell脚本学习笔记系列--1

一.学好shell编程的知识储备 1.相关Linux系统命令应用: 2.Vi/vim 编辑器的熟练使用,相关客户端软件的设置: 3.基础的服务,系统服务ntp,crond,网络服务:nfs,rsync,inotify,sersync,ssh,lanmp等. 补充:清空日志的三种方法: 1)echo  " " > filename.log 2)>filename.log 3)cat  /dev/null > filename.log 注:工作中有的时候不能删除(日志)文

shell脚本学习笔记:通过shell实现linux用户管理和监控

学习shell做的第一个脚本,感谢云知梦李强强老师的shell编程教程 创建shell脚本文件: touch menu.sh touch index.sh touch welcome.sh 赋予脚本文件可执行权限: chmod a+x menu.sh index.sh welcome.sh menu.sh #!/bin/bash #menu.sh function menu(){ title="My Home" name="Randy" time=`date +%Y

Shell 脚本学习笔记十:Shell输入输出重定向

command > file       将输出重定向到 file. command < file       将输入重定向到 file. command >> file     将输出以追加的方式重定向到 file. n > file              将文件描述符为 n 的文件重定向到 file. n >> file             将文件描述符为 n 的文件以追加的方式重定向到 file. n >& m             

shell 脚本学习笔记--函数

一.定义格式 [function] 函数名() { 命令表 } 二.调用方法 先定义,后使用,直接输入函数名,不需要圆括号() 三.函数参数传递方法 可以利用位置参数或者变量进行传递 #! /bin/bash# myfirst.sh testFunction() { echo "$1,$2" #位置参数传递参数 echo "$val1,$val2" #变量传递参数 } val1="test1" val2="test2" tes

shell脚本学习笔记 (流编辑器sed)

sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用很普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出. sed不只支持正則表達式.它另一些比較厉害的功能. 我给出一个样例,大家看看有什么办法能够解决它吧. <html><head><title>Hello World</title> <body>Welcome to the world of regexp!&l

Shell脚本学习笔记-函数

1.  基本的脚本函数 1.1 函数的定义 function name { commands } 或者 name() { commands } 1.2 简单示例 #!/bin/sh function Func01 { echo "This is function of Func01" } Func02() { echo "This is function of Func02" } Func01 Func02 运行结果: 1.3 函数返回值与退出码 #!/bin/sh

Shell脚本学习笔记-循环结构

1. for循环语句 1.1. 语法格式: for var in list do commands done for ((表达式)) do commands done 1.2 简单示例: #!/bin/sh #从直接列表读取 echo "从直接列表读取" for var in 1 2 3 do echo "$var" done echo "\n" #从变量读取 echo "从变量读取" list="a b c&quo

shell脚本学习笔记

1.判断符号:中括号[ ] [ ]进行数据的判断,例如我想知道HOME这个变量是否为空,[ -z "$HOME" ],或者两个字符串是否相等,[ "$HOME"  ==  "$MALI" ].由于中括号使用的地方有很多,所以在bash中作为判断式时,中括号的两端需要有空格来分隔.在使用中需要注意: 在中括号内的每个组件都需要有空格键来分隔 在中括号内的变量,最好以双引号括号起来,例如"$HOME" 在中括号内的常量,最好以单或