您的位置:首页 > 运维架构 > Shell

shell脚本编程的一些基础

2011-12-11 13:12 676 查看
bash 脚本名 可以运行脚本

bash的常用选线

#bash

-n 语法测试

-x 显示过程

编程语言:

动态语言(脚本语言)

变量不需要事先证明

解释执行

编辑--->执行

高级脚本语言 perl 太自由 python (完全面向对象) 只提供一种最优的 方法 ruby

asp jsp php (不用使用到root权限) 面向网页的脚本语言

静态语言(编译行语言)

变量必须声明,严格区分变量类型

编译后才能执行

编辑--->编译--->连接--->执行

变量是命名的内存空间 命名 为了以后程序的调用方便

变量:

变量类型:限定 占内存空间大小、数据存储格式

3

字符 8bit

数值 2bit

bash 不严格区分变量类型 区分数值型和字符型 不支持浮点行

2/3=0 只区整数部分--->圆整

命令行下声明的变量 只对当前登录的shell 及子shell 有效

变量

a3

declare

-i integer

-x 环境变量

declare -i A=0 初始化 声明一个变量 并赋值

set A=3 set 声明的都是本地变量 有空格要用引号引起来

变量类别(class):

本地变量: 只对当前shell有效 整个脚本都有效 不能到其他脚本

环境变量(全剧变量):对当前shell和子shell 有效

export declare -x 声明环境变量

导出环境变量的方法:

1、先先声明变量,然后export导出

2、直接export导出

特殊变量:

$0 特殊变量 用于引用脚本本身的名字

$* $@ 特殊变量 引用一个脚本的所有参数

$* 把每个变量都当一个字符串

$@ 把所有变量当成一个字符串

$# 传递个命令行参数的个数

位置变量:

$1-9 {0-无线}

shift $1 轮换显示变量

local 定义变量 只对当前代码段有效

变量用完之后怎么处理:脚本结束后自动收回也可以

unset 撤销变量 收回

如何引用变量:

${变量名} 变量替换/引用

$变量名 ANIMAL=pig There are some ${ANIMAL}s.

引号;引用

"":弱引用

'':强引用 强引用中的值不做变量替换 直接引用过来

``:命令引用

变量名的使用规定:

只能包含字母数字和下划线,但是不能以数字开头

#echo 变量 显示变量的值

用户工作环境配置文件:

全局配置:/etc/prefile, /etc/profile.d/*, /etc/bashre

个人配置:~/.bash_profile, .bashrc

~/.bash_history 命令历史

~/.bash_logout 登出配置

profile类 :交互式登录用户生效

1、设置环境变量

2、运行一些命令或脚本

bashrc类:交互式和非交互式登录用户生效(不用用户登录就系要执行一些)

1、设置本地变量

2、定义命令别名

交互式登录用户执行用户配置文件的过程

/etc/profile--->/etc/profile.d/*--->~/.bash_profile--->~/.bashrc--->/etc/bashrc

非交互式登录:

~/.bashrc--->/etc/bashrc--->/etc/profile.d/*

显示变量

#set 显示所有变量

#export 只用于显示声明过的环境变量

#printenv 显示环境变量

几个关键的环境变量

DISPLAY:定义显示信息显示到那个显示器上去

LANG:声明当前的语言环境.字符编码

PATH: 声明 命令行在那个位置找命令对应的文件

输入输出重定向 和管道

标准输入,标准输出,标准错误输出

标准输入:STDIN 用0表示 默认是键盘

标准输出:STDOUT 用1表示 默认是监视器

标准错误输出:STDERR 用2表示 默认是监视器

输出重定向:

>:定义标准输出重定向 会把文件原有内容覆盖掉 覆盖输出重定向

>>: 追加输出重定向

2>:错误覆盖输出重定向

2>>:错误追加输出重定向

&>混个输出覆盖重定向

&>>混合输出

&> /dev/null 丢弃输出

set -C 不允许使用覆盖输出

set +C 允许使用覆盖输出

管道:把一个命令的输出当作另一个命令的输入

|

COMMAND1 | COMMAND2 | COMMAND3 | ...

管道一次把所有的内容传给后面的 命令

#tee 既显示又保存 两项输出

输入重定向;

< 输入重定向 符号

<< here document 用于脚本当中生成一个问件时使用

脚本条件判断:

判断:bash

test expression

[ expression ] 必须有空格 可以做单独的语句

[[ expression ]] 可以使用类似正则表达式的方式

[ ! expression ] 非

数值比较 整数比较测试

-gt 大于 great than

-ge 大于等于 great

-lt 小于

-le 小于等于

-eq 等于

-ne 不等于

字符串测试

=,==

>

<

-z 测试是否为空 空为真

-n 测试是否不为空 不空为真

字符串比较两边都加 双引号

文件测试

-e 测试一个文件是否存在 存在为0

-f 是否是普通文件

-d 是否是目录

-h/-L 是否是符号链接 软连接

-r

-w 当前用户是否对这个文件有写权限

-x 用户对指定的文件是否有执行权限

脚本编程:

程序的执行流程

顺序执行

选择分支(条件判断)

循环执行

跳转(慎用)

单分支:

if 测试条件;then

语句1

语句2

...

fi

双分支:

if 测试条件;then

语句1

语句2

...

else

语句1

语句2

...

fi

多分支:

if 测试条件;then

语句1

语句2

...

elif;then

语句1

语句2

...

elif;then

语句1

语句2

...

else

语句1

语句2

...

fi

if组合条件测试:

-a

-o

!

循环方式:

for:遍历试的执行

for 变量 in 列表;do

语句1

语句2

...

done

while

until

CONTITNUE

重新循环

BREAK

跳出循环

选择语句

case 语句

A B C D

case $A in

a)

statement

...

;;

b)

statement

...

;;

c)

statement

...

;;

*)

statement

...

;;

esac

表达式之间的逻辑关系: && 优先级略高于||

!expression 逻辑非

expression1 && expression2 与

短路操作符 0

expression1 || expression2 或

短路操作符 1

!0=1

!1=0

1&1=1

1&0=0

0&1=0

0&0=0

0|0=0

0|1=1

1|0=1

1|1=1

组个多个条件:

-a and

-o or

-not,!

!x -a !y =!(x -o y)

逐个替换用 ·· 命令替换

函数

function :功能 函数

调用前必须先定义

定义函数

function F_NAME{

函数体

}

F_NAME(){

含实体

}

return 退出函数 向主调函数然会一个状态返回值

local 定义变量 只对当前代码段有效
本文出自 “lovvvve的学习笔记” 博客,请务必保留此出处http://lovvvve.blog.51cto.com/3828397/739179
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: