Bourn Again Shell编程
shell既是命令解释程序,又是一种高级程序设计语言。shell是解释型语言。
- bash脚本的建立和运行:
注释行以#开头
#!后面的参数告诉系统执行本文件的程序
执行脚本文件有两种方法:
1. /bin/bash scp1
2. chmod u+x scp1
./scp1
2. shell的变量:
1. 比较重要的环境变量:$HOME, $PATH, $0, $1~$9, $*, $@, $#, $$, $?, $!
2. 用户自定义变量:
一个bash变量默认是一个字符串。
bash不一定要声明变量,但是有些特殊类型的变量必须要声明,可以使用declare或者typeset命令来声明变量,对它们进行初始化,并设定它们的属性。
declare [options] [name[=value]]
typeset [options] [name[=value]]
常用选项:-a 数组,-f 函数,-i 整数,-r 只读,-x 变量可被子进程访问
bash变量不一定要在使用前声明或初始化,一个没有声明没有初始化的变量的初值是一个空串。
声明一个现有的变量并不会改变这个变量的当前值。
注意变量赋值时,=号前后不能有空格,如果值有空格,必须加“”。
一个整形变量不能被赋予非整形的变量,非整形的变量可以赋予任何值。
unset[name-list] 重设或删去name-list中的变量值或者函数
在shell中,可以通过在变量名前加一个$符号来访问它的内容,当为变量赋值时,不要使用$符号。
“”内解释$,`,\符号,‘’内则不解释,\可以去除这些字符的特殊含义。
$(command)或者`command` ,shell把它替换为这个命令的输出结果,这个过程称为命令替换。
read [options] variable-list 将用户的输入值赋值给一个shell变量
常用选项:-a name 读入name中去,-e 一整行读入第一个变量,-n 光标任停留在同一行,-p prompt 如果是从终端输入,显示prompt字符串
- shell脚本位置参数的传递:
在Linux中运行命令或者脚本程序时,可以在命令行中进行参数的传递,前9个参数的值被存放在shell环境变量$1到$9中。但脚本程序的参数多于9个时,用shift命令来使 用多于9个的参数。
位置参数的值可以用set命令来设置。
- 控制结构语句:
if-then-elif-else-fi
表达式expression可以用test expression命令或[expression]来检测,这个命令检测一个表达式并返回true还是false。注意:在操作数和操作符或者括号的前后都要至 少留一个空格。
test命令可以使用的条件类型可以归为三类:字符串比较、算数比较、与文件有关的条件测试。
for variable [in argument-list]
do
command-list
done
while expression
do
command-list
Done
until expression
do
command-list
done
case variable in
|
pattern1) |
command-list;; |
|
pattern2) |
command-list;; |
|
… *) |
command-list;; |
esac
- 其他几个有用的语句:
break、continue、exit、printf(不支持浮点数)
- 数值处理:
在linux系统中bash变量的值是以字符串方式存储的,如果需要进行算术和逻辑操作,必须先转换为整数,得到运算结果后再转换为字符串。
bash提供了三种方式对数值数据进行算术运算:
1. let express-list express-list中使用shell变量,无需加$。
2. $((expression)) express中使用shell变量,无需加$。
3. expr命令: x=$(expr $x + 1)
- 数组:
可以使用declare、local、readonly等语句声明数组变量,也可以直接赋值的方法声明一个数组:
ns=(max san [6]=zhang [25]=wang)
echo ${ns[6]}
a=("${ns[@]}") 原数组跟先数组一样
b=("${ns[*]}") 原数组的所有值赋值给先数组的第一个元素
size=${#ns[*]} ${#ns[5]} 第6数组单元的大小,以字节为单位
- 函数:
function_name() {
command-list
}
当一个函数被调用时,位置参数$*、$@、$#、$1~$9会被替换为函数的参数。
- here文档:
它允许一条命令在执行时,就好像在读取一个文件或键盘一样,而实际上是从脚本程序中得到输入数据。
command<<[-]input-marker
…input data…
input_marker
- exec命令:
使用exec内部命令来执行新的命令以替换当前的shell进程,而不是生成一个新的进程。命令结束时,返回父进程,而不是调用它的进程(也就是被覆盖的进程)。
可以通过exec命令来重定向,但重定向之后,shell不会返回标准终端,除非执行exec</dev/tty或exec>/dev/tty
- trap命令:
trap命令用于指定在接收到信号后,将要采取的行动。trap命令的一种常见用途是在脚本程序被中断时完成清理操作。信号被保存在signal.h中,使用信号名时,可以省略 SIG前缀,trap -l查看信号编号及关联的名称。
trap ['command-list'] [signal-list]
trap - signal-list 返回默认动作
trap '' signal-list 忽略信号
kill -l 列出所有信号
- 调试脚本程序(略)
Bourn Again Shell编程的更多相关文章
- Linux学习笔记(17) Shell编程之基础
1. 正则表达式 (1) 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式:通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find ...
- shell编程:定义简单标准命令集
shell是用户操作接口的意思,操作系统运行起来后都会给用户提供一个操作界面,这个界面就叫shell,用户可以通过shell来调用操作系统内部的复杂实现,而shell编程就是在shell层次上进行编程 ...
- Linux Shell编程入门
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...
- Shell编程菜鸟基础入门笔记
Shell编程基础入门 1.shell格式:例 shell脚本开发习惯 1.指定解释器 #!/bin/bash 2.脚本开头加版权等信息如:#DATE:时间,#author(作者)#mail: ...
- Linux_10------Linux之shell编程------变量
.-9 vim num.sh #! /bin/bash num1=$1 num2=$2 sum=$(($num1+$num2)) #变量sum是num1和num2的综合 echo $sum 执行 ./ ...
- 需要交互的shell编程——EOF(转载)
在shell编程中,”EOF“通常与”<<“结合使用,“<<EOF“表示后续的输入作为子命令或子shell的输入,直到遇到”EOF“, 再次返回到主调shell,可将其理解为分 ...
- ****CodeIgniter使用cli模式运行,把php作为shell编程
shell简介 在计算机科学中,Shell俗称壳(用来区别于核).而我们常说的shell简单理解就是一个命令行界面,它使得用户能与操作系统的内核进行交互操作. 常见的shell环境有:MS-DOS.B ...
- Shell 编程基础之变量和环境变量
一.变量赋值和引用 Shell 编程中,使用变量无需事先声明,同时变量的命名不惜遵循如下规则: 首个字符必须为字母(a-z,A-Z)或者_ 变量名中间不能有空格,可以使用_连接 不能使用其他表达符号 ...
- Linux Shell编程基础
在学习Linux BASH Shell编程的过程中,发现由于不经常用,所以很多东西很容易忘记,所以写篇文章来记录一下 ls 显示当前路径下的文件,常用的有 -l 显示长格式 -a 显示所有包括隐 ...
随机推荐
- iOSAPP添加启动页
如果你在开发过程中出现屏幕显示内容比例不正常或者显示不全的问题,你发现不是代码或者约束的问题,那么很可能是启动页没有添加或者添加不全的原因,下面配一张问题图片上下黑屏 添加启动页步骤如下图 (1) ( ...
- Tiny6410之控制icache驱动
什么是cache: 基于程序访问的局限性,在主存和CPU通用寄存器之间设置了一类高速的.容量较小的存储器,把正在执行的指令地址附件的一部分指令或数据从主存调入这类存储器,供CPU 在一段时间内使 ...
- KMP算法的实现
今天看到了一篇关于KMP算法的讲解的文章,很难得,讲得非常清楚.分享给大家,希望对大家有帮助.http://kb.cnblogs.com/page/176818/ 我自己基于这个讲解的内容作了一个实现 ...
- 3、XCode: 如何添加自定义代码片段
我们经常会定义一些retain的property,而且大概每次我们都会像这样写: @property (nonatomic, retain) Type *name; 每次都要老老实实的把“@prope ...
- setcookie 设置无效
转载请署名 achieverain,谢谢 经常见人问PHP程序无法设置cookie.下面把我遇见过的情况都说一遍 1 PHP程序在执行setcookie之前有输出. 解决 : 把setcooki ...
- Oracle跨库访问数据表-DBLINK
1:创建DBLINK(USING后面的连接字符串就是要访问的那个数据库的连接字符串) CREATE DATABASE LINK linkName CONNECT TO userName IDENTIF ...
- 内存溢出System.OutOfMemoryException
.Net 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结 在什么情况下会出现OutOfMemonryException呢? 在我们试图新建一个对象时,而垃圾 ...
- Express ( MiddleWare/中间件 路由 在 Express 中使用模板引擎 常用API
A fast, un-opinionated, minimalist web framework for Node.js applications. In general, prefer simply ...
- Redis哈希相关命令
hash类型(类似于多维数组)hset key field value 把key中filed域的值设置为value(如果之前存在就覆盖,不存在就添加) hmset key field1 value1[ ...
- Weex-进阶笔记二
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica; color: #945200 } p.p2 { margin: 0.0p ...