shell基础

一、编程基础

程序:指令+数据

二、编程风格

过程式:以指令位中心,数据服务于指令

对象式:以数据为中心,指令服务于数据

三、编程基本概念

变成逻辑处理方式:

顺序执行

循环执行

选择执行

shell编程过程其实就是解释执行

shell编程思路:从无到有(先码出基本的框架实现基本的功能),再到功能的完善和程序的严谨

四、编程语言的基本结构

各种系统命令的组合

数据存储:变量、数组

表达:a+b

语句:if for case ...

五、脚本基本格式

脚本规范

1、第一行一般为调用使用语言

2、程序名,避免更改文件名为无法找到正确的文件

3、版本号

4、更改后的时间

5、作者相关信息

6、该程序的作用,及注意事项

7、最后是各版本的更新简要说明

以上信息全部用#注释书写,请勿忘记书写#号,以免导致程序报错

格式要求:首行shebang机制

这个符号(#!)的名称,叫做”Shebang”或者”Sha-bang”。长期以来,shebang都没有正式的中文名称。Linux中国翻译组的 GOLinux 将其翻译为:释伴,即解释伴随行的简称,同时又是shebang的音译。

六、变量

1.命名法则:

(1)不能使程序中的保留字:例如:if for

(2)只能使用数字、字母及下划线、切不能以数字开头

(3)见名知意

(4)统一命名规则:驼峰法  例:DisCeck.sh

加()括号让变量变成一次性,等于打开一个子shell,关于()\[]\[[]]\{}用法请看另一篇文章   shell中各种括号的使用详解(),(()),[],[[]],{}

 

 

2.bash变量的种类

局部变量:只针对当前shell有效,

全局变量(环境变量):针对当前和子shell有效,通过pstree查看shell进程树

export来声明全局变量。例:export NAME=test,父进程只可以传给子进程,而不能影响父进程的上一级进程

declare -r 定义只读变量(一般用于数值运算定义)

unset name  删除全局变量内容

只读变量和位置变量

$1:后面第一个参数

$2:后面第二个参数 (以此类推)

${10}:表示第十个参数

$0:脚本名的本身

$#:显示参数个数

$*:传递给脚本的所有参数,但参数合为一个字符串

$@:传递给脚本的所有参数,但参数合为独立的字符串

$?:输出进程状态来表示成功还是失败0为成功,1-255都为失败

shift:读取完第一个参数以后,踢掉,把第二个参数往前面移动,变成第一个参数

 

 

 

七、shell算数运算:help let

+, -, *, /, %取模(取余), **(乘方)

1.实现算术运算:

(1) let var=算术表达式

(2) var=$[算术表达式]

(3) var=$((算术表达式))

(4) var=$(expr arg1 arg2 arg3 ...)

(5) declare –i var = 数值

(6) echo ‘算术表达式’ | bc

bash有内建的随机数生成器:$RANDOM(0-32767)

echo $[$RANDOM%50] :0-49之间随机数

 

2.逻辑运算

true false

1,0

与:

1 与 1 = 1

1 与 0 = 0

0 与 1 = 0

0 与 0 = 0

u 或:

1 或 1 = 1

1 或 0 = 1

0 或 1 = 1

0 或 0 = 0

非:!

! 1 = 0

! 0 = 1

短路运算

短路与 &&

第一个为0,结果必定为0

第一个为1,第二个必须要参与运算

短路或 ||

第一个为1,结果必定为1

第一个为0,第二个必须要参与运算

 异或:^

异或的两个值,相同为假,不同为真

 

 

八、bash 的数值测试

1.数值测试:

[]里面用到变量一定要用双引号引起来。

=:比较字符串

-eq:等于(比较数字)

-ge:大于等于

-ne:不等于

-gt :是否大于

-lt :是否小于

-le:是否小于等于

2.字符串测试

== 是否等于

> ascii码是否大于ascii码

< 是否小于

!= 是否不等于

=~ 左侧字符串是否能够被右侧的PATTERN(正则表达式)所匹配

注意: 此表达式一般用于[[ ]]中;扩展的正则表达式

-z "STRING“ 字符串是否为空,空为真,不空为假

-n "STRING“ 字符串是否不空,不空为真,空为假

 注意:用于字符串比较时的用到的操作数都应该使用引号

 

九、Bash文件测试

1.存在性测试

-a FILE:同-e

-e FILE: 文件存在性测试,存在为真,否则为假

 存在性及类别测试

-b FILE:是否存在且为块设备文件

-c FILE:是否存在且为字符设备文件

-d FILE:是否存在且为目录文件

-f FILE:是否存在且为普通文件

-h FILE 或 -L FILE:存在且为符号链接文件

-p FILE:是否存在且为命名管道文件

-S FILE:是否存在且为套接字文件

文件权限测试:

-r FILE:是否存在且可读

-w FILE: 是否存在且可写

-x FILE: 是否存在且可执行

 2.文件特殊权限测试:

-u FILE:是否存在且拥有suid权限

-g FILE:是否存在且拥有sgid权限

-k FILE:是否存在且拥有sticky权限

3.文件大小测试:

-s FILE: 是否存在且非空

 文件是否打开:

-t fd: fd 文件描述符是否在某终端已经打开

-N FILE:文件自从上一次被读取之后是否被修改过

-O FILE:当前有效用户是否为文件属主

-G FILE:当前有效用户是否为文件属组

 

十、Bash的组合测试条件

 第一种方式:

COMMAND1 && COMMAND2 并且

COMMAND1 || COMMAND2 或者

! COMMAND 非

如:[[ -r FILE ]] && [[ -w FILE ]]

 第二种方式:

EXPRESSION1 -a EXPRESSION2 并且

EXPRESSION1 -o EXPRESSION2 或者

! EXPRESSION

示例:

[ -z “$HOSTNAME” -o $HOSTNAME "==\

"localhost.localdomain" ] && hostname www.baidu.com

[ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab

相关命令

 read:等待用户输入命令

-p:添加提示信息

-s:不显示输入内容

-t:设置超时时间

bash -n 检查shell语法错误

-x 查询执行过程

十一、bash配置文件

全局配置文件:

/etc/profile

/etc/profile.d/*.sh

/etc/bashrc

个人配置:

~/.bash_profile

~/.bashrc

十二、$-变量

h:hashall,打开这个选项后,Shell 会将命令所在的路径hash下来,避免每次都要查询。通过set +h将h选项关闭

i:interactive-comments,包含这个选项说明当前的 shell 是一个交互式的 shell。所谓的交互式shell,在脚本中,i选项是关闭的。

m:monitor,打开监控模式,就可以通过Job control来控制进程的停止、继续,后台或者前台执行等。

B:braceexpand,大括号扩展

H:history,H选项打开,可以展开历史列表中的命令,可以通过!感叹号来完成,例如“!!”返回上最近的一个历史命令,“!n”返回第 n 个历史命令

十三、shell执行优先级次序

 把命令行分成单个命令词

 展开别名

 展开大括号的声明({})

 展开波浪符声明(~)

 命令替换$() 和 ``)

 再次把命令行分成命令词

 展开文件通配(*、?、[abc]等等)

 准备I/0重导向(<、>)

运行命令

 

小总结\小技巧:

1.组合命令必须使用测试命令进行

2.在[]里面算数运算,空格很重要,能加则一定加

3.let $name1+$name2 变量相加则不需要空格

4.在shell中不支持别名

5.脚本执行完毕后尽量用unset删除变量垃圾

6.[]中引用变量尽量用""规范写法

7.用于字符串比较时的用到的操作数都应该使用引号

8.批量对变量赋值

echo a b c > f1

read x y z < f1  即$x对应字母a以此类推

个人博客地址:http://babyhuitao.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值