Linux 第九天: Linux Shell脚本编程

Linux 第九天: (08月11日) Linux Shell脚本编程

 

 

Shell脚本是包含一些命令或声明, 并符合一定格式的文本文件
格式要求 运行shebang机制
#!/bin/bash

 

bash -n /path/to/some_script  检测脚本中的语法错误
bash -x /path/to/some_script  调试执行

 
bash中变量的种类
本地变量 生效范围 当前shell进程, 对当前外进程, 包括子shell无效
环境变量 生效范围 当前shell进程和子进程
局部变量 生效范围 当前shell进程中某代码片段 通常指函数
位置变量 $1 $2 让脚本在代码中调用通过命令行传递给它的参数
特殊变量 $? $0 $* $@ $#

 

变量赋值name='value'
name="root"字符串
name="$USER"变量引用
name=`COMMAND` 命令引用
name=$(COMMAND) 命令应用

 

变量引用 ${name} $name
""弱引用 其中变量引用被替换为变量值
''强引用 其中变量引用不会被替换为变量值 保持原字符串

set显示已定义的所有变量
unset name 删除变量

export name=VALUE 变量声明 赋值
declare -x name=VALUE

变量引用 $name ${name}
显示所有环境变量
export
env
printenv

删除 unset name

只读变量 只能声明 不能修改和删除
readonly name
declare -r name

位置变量 在脚本代码中调用通过命令行传递给脚本的参数
$1,$2,..对应第1第2参数shift[n]换位置
$0 命令本身
$* 传递给脚本所有参数 全部参数合为一个字符
$@ 传递给脚本所有参数 每个参数为独立字符
$# 传递给脚本的参数的个数
$@ $* 只在被双引号包起来才有差异

linecount="$(wc-l $1|cut -d' ' -f1)"
echo "$1has $linecount lines"

bash的算术运算
+ – * / % **
let var=算术表达式
var=$[算术表达式]
var=$((算术表达式))
var=$(expr arg1 arg2 arg3…)
declare -i var = 数值
echo '算术表达式'|bc
$RANDOM (1-32767) 随机数生成器
echo $[$RANDOM%50] 0-49取随机数
增强型赋值 += -= /= %=
let count+=3 自加3后自赋值

s? 变量保存最近命令退出状态
0 成功 1-255失败
exit [n] 自定义退出状态码

测试命令
test EXPRESSION
[EXPRESSION]
[[EXPRESSION]]

&& 代表AND THEN
|| 代表OR ELSE

数值测试
-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于

字符串测试
== 是否等于
> ascii 是否大于ascii码
< ascii 是否小于ascii码
!= 是否不等于
=~ 左侧是否能被右侧匹配
-z "STRING" 字符串是否为空 空为真 不空为假
-n "STRING" 字符串是否不空 不空为真 空为假

 

 

文件测试

-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 是否存在且可执行

文件特殊权限测试
-g FILE 是否存在且拥有sgid权限
-u FILE 是否存在且拥有suid权限
-k FILE 是否存在且拥有sticky权限

文件大小测试
-s FILE 是否存在且非空

文件是否打开
-t fd 表示文件描述符是否已经打开且与某终端相关
-N FILE 文件自动上一次被读取之后是否被修改过
-O FILE 当前有效用户是否为文件属主
-G FILE 当前有效用户是否为文件属组

双目测试
FILE1 -ef FILE2 file1与file2是否指向同一个设备上相同inode
FILE1 -nt FILE2 file1是否新于file2
FILE1 -ot FILE2 file1是否旧于file2

 
组合测试
第一种
COMMAND1 && COMMAND2 并且
COMMAND1 || COMMAND2 或者
! COMMAND 非

第二种
EXPRESSION1 -a EXPRESSION2 并且
EXPRESSION1 -o EXPRESSION2 或者
! EXPRESSSION
必须使用测试命令进行

 

 

 

原创文章,作者:dengjian,如若转载,请注明出处:http://www.178linux.com/35729

(0)
dengjiandengjian
上一篇 2016-08-15 09:22
下一篇 2016-08-15 09:22

相关推荐

  • 马哥教育网络班20期+第2周课程练习

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。   答:文件操作     ls 列出目录下的文件名      ls -l /     touch 文件不存在时生成该文件      touch a.txt   &…

    Linux干货 2016-06-23
  • Linux基础 文件权限

    概述 从接触linux第一天开始,Linux一切皆文件的哲学思想就深植于每个linuxer的心中,因此,实现Linux的系统安全必然绕不开文件权限。文件的权限是建立在用户的基础上的,脱离了用户,文件权限也就变得毫无意义了。用户、组和文件权限一起铸就了linux的系统安全模型。本文主要从文件权限方面了解Linux的安全模型。 文中主要讲解了: 1. 文件权限r…

    Linux干货 2016-08-05
  • Linux基础之shell脚本编程(二)

    1、写一个脚本,完成以下功能    (1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;    (2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;    (3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串; &nb…

    Linux干货 2016-11-17
  • 0809linux基础小记(sed和vim用法)

    sed  [options] ‘scripts’ inputfile -n: 不输出模式空间内容的自动打印 -e: 多点编辑 -f:从指定文件中读取编辑脚本 -i:原处编辑 scripts: ’地址命令’ 地址定界: (1)  不给地址:对全文进行处理 (2)  单地址: #:  指定的行 例: sed '2…

    Linux干货 2016-08-11
  • GREP EGREP的用法及正则表达式和扩展正则表达式简述

    egrep grep的使用方法 正则表达式及扩展表达式简述 使用事例   grep egrep都是文本搜索工具,可以把符合模式的行或字符显示出来,而这些模式grep一般使用正则表达式进行匹配,而egrep使用扩展正则表达式来进行匹配的。 grep及egrep的使用方法:           &nbs…

    Linux干货 2015-07-27
  • 如何在微软Azure云机上添加新磁盘

    大家好: 最近在项目实践中,分享下如何在微软Azure云机上添加新磁盘。 首先需要查看下是否有未用上的磁盘,先fdisk -l查(看下图)并和Azure技术确认该磁盘是否可永久保存数据: 然后找到未分区的磁盘号,如上图中的/dev/sdc,再 fdisk /dev/sdc后开始在该新磁盘上进行分区创建: 为方便管理,我们一般就创建一个分区,然后进行格式化: …

    Linux干货 2016-11-27

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-15 16:49

    总结的很好,希望能有一些脚本示例,注意了,以后作业写在博客总结后面。