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
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
相关文章推荐
- 【Shell 编程基础第一部分】第一个Shell脚本HelloShell及一些简单的Shell基础书写与概念
- 【Shell 编程基础第一部分】第一个Shell脚本HelloShell及一些简单的Shell基础书写与概念;
- 【Shell 编程基础第一部分】第一个Shell脚本HelloShell及一些简单的Shell基础书写与概念;
- 【Shell 编程基础第一部分】第一个Shell脚本HelloShell及一些简单的Shell基础书写与概念
- 嵌入式开发之linux基础第七天学习笔记 shell脚本编程(二)
- Shell脚本编程的一些小风格
- 关于shell脚本编程一些有用资源的小结
- shell脚本编程基础1及练习
- 【Linux 系统编程】shell 脚本基础学习之函数(五)
- 【Shell 编程基础第二部分】Shell里的流程控制\函数及\脚本调试
- Linux学习(三)- shell脚本编程基础
- Shell 脚本编程入门基础
- Shell脚本编程基础笔记一
- 关于shell脚本编程基础第五篇
- shell脚本编程入门基础(附:自动备份与解包文件脚本)
- shell编程基础 脚本
- 测试基本功-Shell脚本编程基础教程
- Linux 基础命令(十)—— SHELL脚本编程进阶(一)
- 嵌入式开发之linux基础第六天学习笔记 shell脚本编程(一)
- Linux shell编程 1 ---- shell脚本编程基础