linux学习---shell编程
来源:互联网 发布:风月知相思 在线阅读 编辑:程序博客网 时间:2024/06/06 07:23
一.Shell编程
首先声明下,我是一个shell菜鸟,甚至连菜鸟都称不上,刚学了2天shell,把学习的整理下,如果发现有什么错误,请指正,另外,如果想要了解详细的shell编程,请借助linux 那个”男人”,我发现man bash东西好多····
简单来说Shell是一个负责把用户的语法的语言解释成系统与内核调用的解释程序
最早的shell采用的语言是algol语言,后采用C语言
所以shell可以根据语言分类
Algol:sh,ksh,bash
C:csh,tcsh
目前我机器是安装的是ubuntu 16 04,默认是bash,所以后续后半部分采用bash去说明下shell的使用
可以使用 echo $SHELL来看下你默认的linux or unix版本的shell,执行如下,我们可以看到是默认执行/bin下的bash程序
二.编写第一个shell脚本
Shell脚本默认扩展名没有做强制要求,但是强烈推荐为*.sh
Shell编程用;或者 newline分隔命令
并且shell第一行必须用#!/bin/bash来指定shell解释程序
#!/bin/bashdatelsdate;ls
执行结果如下,需要注意的是在执行前必须通过chmod来增加执行权限
三.普通变量使用示例
因为shell是弱语言类型,所以无需声明类型
用如下形式定义
变量的引用
$变量名
程序源码
#!/bin/basha=20b=helloc= echo${a}${b}${c}echo $a d=20+30echo $d
执行结果
大家有没有看到一个奇怪的地方就是打印d的时候,居然打印出胡20+30,因为shell把他认为是字符串打印出来,解决这个有两种方法
1. declare –i 变量
2. typeset –i 变量
四.命令行变量
命令行参数一共有几个以下特殊的定义
$# ----à命令行参数个数
$*-----à所有命令行参数
$0-----à命令本身
$1~$9-----à第一个到第九个参数,注意,参数超过10个,需要自己解析
程序以及运行结果为
五.数组的操作
1. 数组定义
三种方式
1) a[1]=10;a[4]=40
注意:shell数组并不要求下标是连续的
2)declare -a b=(1 2 3 4)
3)c=(hello world)
2. 数组的操作
1) 获取数组长度
declare -a b=(1 2 3 4)
echo 'b len'${#b[*]}
echo 'b len'${#b[@]}
执行结果
2) 读取某个下标值
c=(hello world)
echo ${c[1]}
执行结果
3) 打印整个数组下标
c=(hello world)
echo ${c[*]}
echo ${c[@]}
执行结果
4) 打印整个数组
a[1]=20;a[3]=30
declare -a b=(1 2 3 4)
c=(hello world)
echo ${!a[*]}
echo ${!b[*]}
echo ${!c[@]}
执行结果
六.流程控制
条件语句
1. if语句
语法:
if 条件测试语句then 语句[elif 条件then 语句else 语句]fi
条件不清楚请参考:http://blog.csdn.net/xiaoxiaopengbo/article/details/78143393
来个实例体会下if语句
实例代码和运行图
循环语句
2. for循环
语法:
for((表达式; 表达式; 表达式))do 语句done
实例代码和运行图
3. While语句
语法:
while 条件测试do 语句done
实例代码和运行图
4. Until语句
语法:
until 条件测试do 语句done
和while的区别是while满足条件测试执行,而until是满足条件退出
实例代码和运行图
5. For in语句
语法:
for 变量 in 字符串列表do 语句done
实例以及运行图
此处需要注意的点是:如果字符串被“”放进去,只会循环一次
选择语句
6. Select语句
语法:
select 变量 in 列表do 语句done
此语句相当于在列表中选择,实例以及运行效果
注意$REPLY 会捕获你的输入,村早REPLY里面,这个会用到case中
7. Case语句
case 值 in值1) 语句 ;;值2) 语句 ;;*) 语句 ;;esac
实例和测试结果
七.综合案例
找到一个目录中的最新文件
#!/bin/bashif [[ -z$1 ]]then workdir=.else workdir=$1fi newfile=allfiles=`ls${workdir}`echo$allfiles for filein $allfilesdo newfile=$file break done for filein $allfilesdo if [[ $newfile -ot $file ]] then newfile=$file fidone if [[ -z$newfile ]]then echo "dir is empty"else echo newfile:$newfilefi
- Linux Shell编程学习
- Linux Shell编程学习
- Linux Shell编程学习
- Linux Shell编程学习
- linux shell编程学习
- 【学习】linux shell 编程
- linux SHELL编程学习
- Linux--shell编程学习
- linux学习---shell编程
- Linux shell编程 14 ---- 学习shell script
- Linux Shell编程学习笔记
- linux Shell编程学习笔记
- linux shell编程学习笔记
- Linux Shell编程 学习笔记
- linux shell编程学习记录
- linux shell编程进阶学习
- Linux Shell 编程学习总结
- Linux下shell编程学习
- OpenCV-Python——图像处理
- 面向对象编程语言 Python
- 理解es6中的暂时性死区
- 软引用,弱引用的区别
- 【增强版】《Java面试笔试题全面含答案中篇》涉及java/数据库/框架/系统/设计模式相关-中篇
- linux学习---shell编程
- java+python
- centos7安装jdk8
- OpenCV-用imageROI来增加某范围的像素
- Linux下通过管道文件传输信息
- Filter对象的部署与运行
- Git 代码的提交与取消
- 多线程(二)
- masonry.js瀑布流布局,用ajax加载更多后定位重叠,定位不准