shell脚本编程
编译器,解释器

编程语言: 机器语言,汇编语言,高级语言

静态语言:编译型语言
强类型(变量)
事先转换成可执行格式
C,C++,JAVA,C#

动态语言:解释型语言,on the fly
弱类型
边解释边执行
ASP,ASP.NET,PHP,SHELL,PYTHON,PERL

shell: 弱类型编程语言
强类型: 变量在使用前,必须事先声明,甚至需要初始化
弱类型: 变量用时声明,甚至不区分类型

bash变量类型:
环境变量:作用域为当前shell进程及其子进程
export name=value
或者name = value
export name
"导出"
脚本在执行时会启动一个子shell进程:
命令行中启动的脚本会继承当前的shell环境变量
系统自动执行的脚本(非命令行启动)就需要自我定义需要的各环境变量

本地变量(局部变量):
引用变量:${变量名},括号可省略。变量替换 强引用 用"" 双引号
set name=value : 作用域为整个bash进程
局部变量:
local name=value ,作用域为当前代码段:

撤销变量
unset name

查看当前shell 中的变量: set(查看所有变量)

查看当前shell 中得环境变量
printenv
env
export

位置变量
$1, $2....
特殊变量(系统变量)
$? : 上一个命令执行状态返回值;

程序执行:可能有两个状态返回值
程序执行结果
程序返回代码 (0-255)
0 : 正确执行
1-255:错误执行
1,2,127为系统预留执行返回代码

/dev/null : 软件设备, bit bucket , 数据黑洞

脚本:
命令的堆砌,按照实际需要,结合命令流程控制机制实现的源程序
shebang: 魔数
#/bin/bash 指明执行的脚本执行路径
# 注释行,不执行

变量追加
name=aaaa
echo $name
name=$name:bbb
echo name
完成变量的内容追加,类似数组添加元素

条件判断:
bash中,如何实现条件判断?
条件测试类型:
整数测试:
字符测试:
文件测试:

条件测试的表达式:
[ expression ] : []两端必须要有空格 命令测试法
[ [expression] ] 关键字测试法
test expression

如:
INT1=55
INT2=65
[ $INT1 -eq INT2 ]
[ [ $INT1 -eq INT2 ] ]
test $INT1 -eq INT2

整数比较:
-eq : 是否相等 $A -eq $B
-ne : 是否不等: 不等为true,否则为false。
-gt : 大于
-lt : 小于
-ge : 大于或等于
-le : 小于或等于

命令间的逻辑关系:
逻辑与: &&
第一个条件为假时,第二条件不再判断,最终结果已有:
第一个条件为真时,第二条件必须判断

逻辑或: ||

编程风格——>> 变量名称:
1 只能包含字母,数字和下划线,并且不能以数字开头。
2 不能跟系统中已有的环境变量重名。
3 最好见名知意

条件判断: 控制结构
单分支if 语句:

if 判断条件; then
statement 1
statement 2
statement 3
...
fi

双分支if 语句:
if 判断条件;then
statement 1
statement 2
statement 3
..
else
statement 4
statement 5
...
fi

shell中的算术运算:
A=3,B=6
1 let 算术运算表达式
let C =$A+$B
2 $[ 算术运算表达式]
C =${$A+$B}

3 $((算术运算表达式))
C = $(($A+$B))

4 expr 算术运算表达式, 表达式中各操作数及运算符之间要有空格,并且要使用命令引用
C = `expr $A + $B `

文件测试:
- e FILE(文件名或者文件路径) : 测试文件是否存在 isexit
- f FILE : 测试文件是否为普通文件
- d FILE :测试指定路径是否为目录
- r FILE : 测试当前用户对指定路线是否可读。
- w FILE : 测试当前用户对指定路线是否可写。
- x FILE : 测试当前用户对指定路线是否可执行。

[ -e /etc/inittab ]

测试脚本是否有语法错误
bash - n 脚本
bash - x 脚本 逐步展示执行过程

定义脚本退出状态码:
exit : 退出脚本(后面跟上需要的状态码)
如果脚本没有明确定义退出状态码,那么最后执行的一条命令的突出码即为脚本的退出码。
exit 0-255

bash的变量类型
本地变量(局部变量)
环境变量
位置变量:
$1,$2.... (参数位置)
shift: 参数轮替,后面跟数字,实现轮替的步进
./file.sh /etc/inittab /etc/test
$1: /etc/inittab
$2: /etc/test
特殊变量:
$? : 上一条命令的退出状态码
$# : 参数的个数
$* : 参数列表
$@ : 参数列表

字符测试:
==:测试是否相等,相等为真,不等为假
!=: 测试是否不等,不等为真,等为假
>
<
-n string: 测试指定字符串是否为空,空则真,不空则假
-z string: 测试指定字符串是否不空,不空为真,空则为假

#!/bin/bash
#
if [ $ = 'q' ];then
echo "Quiting..."
exit
elif [ $ = 'Q' ];then
echo "Quiting..."
exit
elif [ $ = 'quit' ];then
echo "Quiting..."
exit
elif [ $ = 'Quit' ];then
echo "Quiting..."
exit
else
echo $
fi

循环:进入条件,退出条件
for
while
until

for 变量 in 列表; do
循环体
done

for I in 1 2 3 4 5 6 7 8 9 10; do
加法运算
done

遍历完成之后,退出;

如何生成列表:
{1..100}
`seq [起始数 [步进长度]] 结束数`

1,...,100

declare -i SUM=0
integer
-x

计算100以内所有奇数的和以及所有偶数的和;分别显示之;

let I=$[$I+]
SUM=$[$SUM+$I] let SUM+=$I let I+= 相当于 let I++ -=
let I-= 相当于 let I-- ++I, --I
写一个脚本,分别显示当前系统上所有默认shell为bash的用户和默认shell为/sbin/nologin的用户,并统计各类shell下的用户总数。显示结果形如:
BASH,3users,they are:
root,redhat,gentoo NOLOGIN, 2users, they are:
bin,ftp #!/bin/bash
#
NUMBASH=`grep "bash$" /etc/passwd | wc -l`
BASHUSERS=`grep "bash$" /etc/passwd | cut -d: -f1`
BASHUSERS=`echo $BASHUSERS | sed 's@[[:space:]]@,@g'` echo "BASH, $NUMBASH users, they are:"
echo "$BASHUSERS

测试:
整数测试
-le
-lt
-ge
-gt
-eq
-ne
字符测试
==
!=
>
<
-n
-z
文件测试
-e
-f
-d
-r
-w
-x

if [ $# -gt 1 ]; then

组合测试条件
-a: 与关系
-o: 或关系
!: 非关系

if [ $# -gt 1 -a $# -le 3 ]
if [ $# -gt 1 ] && [ $# -le 3 ]

q, Q, quit, Quit

shell 简单脚本编程的更多相关文章

  1. shell script 脚本编程

    介绍 Shell脚本编程30分钟入门 Shell 教程 Linux 的 Shell 种类众多,常见的有: Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again ...

  2. shell 简单脚本 2

    #!/bin/bash source /etc/profile APPLICATIONS_HOME="/cpic/cpicapp/cpic_analy/jars" APPLICAT ...

  3. shell简单脚本#1

    判断/etc/inittab文件是否大于100行,如果大于,则显示”/etc/inittab is a big file.”否者显示”/etc/inittab is a small file.” #! ...

  4. centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课

    centos   shell脚本编程1 正则  shell脚本结构  read命令  date命令的用法  shell中的逻辑判断  if 判断文件.目录属性  shell数组简单用法 $( ) 和$ ...

  5. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

  6. Shell脚本编程总结及速查手册

    Shell是一种编程语言, 它像其它编程语言如: C, Java, Python等一样也有变量/函数/运算符/if语句/循环控制/… 但在开始之前, 我想先理清Shell语言与Shell之间的关系. ...

  7. 关于shell脚本编程的10个最佳实践

    每一个在UNIX/Linux上工作的程序员可能都擅长shell脚本编程.但大家解决问题的方式却不尽相同,这要取决于对专业知识的掌握程度.使 用命令的种类.看待问题的方式等等.对于那些处在shell脚本 ...

  8. Shell脚本编程具体解释

    第12章 Shell脚本编程   l  Shell命令行的执行 l  编写.改动权限和运行Shell程序的步骤 l  在Shell程序中使用參数和变量 l  表达式比較.循环结构语句和条件结构语句 l ...

  9. shell脚本编程基础

       最近学习了shell脚本编程,感觉自己的脚本写的不太好,所以想把shell脚本相关的知识系统的整理一下,便于以后的学习和使用. 一.shell脚本基础    shell脚本是利用shell的功能 ...

随机推荐

  1. python selenium鼠标键盘操作(ActionChains)

    用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击.双击.点击鼠标右键.拖拽等等.而selenium给我们提供了一个类来处理这类事件--ActionChains sele ...

  2. mac下nginx安装

    一.安装 Nginx 终端执行: brew search nginx brew install nginx 当前版本 1.10.2,通过brew可以把nginx需要的pcre,openssl,zlib ...

  3. Oracle-09:聚合函数

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 数据库脚本放一下,供测试使用 create table DEPT ( deptno ) not null, d ...

  4. Tair总述

    Tair 是淘宝自己开发的一个分布式 key/value 存储引擎.tair 分为持久化和非持久化两种使用方式.非持久化的 tair 可以看成是一个分布式缓存.持久化的 tair 将数据存放于磁盘中. ...

  5. C3垂直居中均分

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. binlog——逻辑复制的基础

    Ⅰ.binlog定义和作用 1.1 定义 记录每次数据库的逻辑操作(包括表结构变更和表数据修改) 包含:binlog文件和index文件 1.2 作用 复制:从库读取主库binlog,本地回放实现复制 ...

  7. spring security oauth2

    https://connect.qq.com/manage.html#/ http://wiki.connect.qq.com/%E7%BD%91%E7%AB%99%E5%BA%94%E7%94%A8 ...

  8. Java开源生鲜电商平台-售后模块的设计与架构(源码可下载)

    Java开源生鲜电商平台-售后模块的设计与架构(源码可下载) 说明:任何一个的电商平台都有售后服务系统,那么对于我们这个生鲜的电商平台,售后系统需要思考以下几个维度. 1. 买家的需求维度 说明:买家 ...

  9. CSS选择器详细总结

    一.基本选择器 序号 选择器 含义 1. * 通用元素选择器,匹配任何元素 2. E 标签选择器,匹配所有使用E标签的元素 3. .info class选择器,匹配所有class属性中包含info的元 ...

  10. Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (下)

    上一篇博客我们已经带大家简单的吹了一下IoC,实现了Activity中View的布局以及控件的注入,如果你不了解,请参考:Android 进阶 教你打造 Android 中的 IOC 框架 [View ...