Shell学习笔记
来源:互联网 发布:网络键盘侠 编辑:程序博客网 时间:2024/06/05 14:35
1.shell脚本的特点
(1)shell是一种弱类型语言
(2)shell是一门解释型语言
(3)shell没有数据类型(结构体),所以类型可以直接使用,不用先定义再使用,需要注意二义性
(4)非编译
2.shell脚本的执行方式
(1)直接执行脚本./pid.sh 首先赋予chomd u+x pid.sh //只授予这个文件所属组的执行权限 然后就可以./pid.sh(2)source命令 作用:不产生新shell,忽略脚本的权限,在当前环境下直接执行脚本。 source由于不产生新shell,第一种会产生新的shell 执行结果会影响当前的shell,所以我们经常使用source来设置当前的shell环境
#!/bin/bash echo $$ #获得当前bash的进程号
运行时的结果:
3.shell语句的条件判断
(1)如何判断大小
#:整数比较 -eq 判断相等 -ne 判断不相等 -gt 大于 -ge大于等于 -lt 小于 -le小于等于#:字符串比较 == != = 字符串比较建议两端加"" 或者 -z
(2)if/then/else /elif/else
if[ command ]; then #[]表示条件测试,特别注意在 '['的后面和']'的前面要加上空格符合该条件执行的语句elif[ command ]; then #记住和C语言的else if区别开来符合该条件执行的语句else符合该条件执行的语句fi#最后不要忘了if和fi要配套使用类似C语言中一个作用域的意思
测试脚本
#!/bin/bash #a=0 #shell的注释符为#,因为shell为弱类型,所以不用指定变量的类型#a=1a=-1if [ $a -eq 0 ];then echo "a=0"elif [ $a -lt 0 ];then echo "a<0"else echo "a>0"fi
测试用例:
4.循环语句
(1)for/do/done
for 变量 in 列表do循环体donefor命令会遍历列表中的每一个值,并且在遍历完成后退出循环。或者for ((...; ...; ...;))#直接类C风格的循环语句,简单粗暴
测试脚本
#!/bin/bashecho "遵循shell语法版本"for i in {1..4}do echo "val is : $i"done echo "类C风格版本"for ((i=1;i<=4;i++))do echo "val is : $i"done
(2)while/do/done
while和C语言学的差不多,只要条件成立就执行循环体
测试代码:
#!/bin/bashval=5while [ $val -lt 7 ] do echo "val is: $val" # val=$(($val+1)) #或者写成下面这种形式 let val++ done
运行结果:
(3)until/do/done
注意until的条件是满足就不运行,不满足就一直运行
#!/bin/bashval=5until [ $val -eq 10 ]do echo "val is: $val" val=$(($val+1)) #或者写成下面这种形式 # let val++ done
shell中变量自增的几种方法1. let i += 1;2. ((i++));3. i = $[$i + 1];4. i = $(($i + 1))
5.数组
数组的测试用例:
#!/bin/basharr=(0 1 2 3 4) #定义一个数组 数组名=(值1 值2 值3 ... 值n)#或者a[0]=12a[1]=23a[2]=34echo "读取arr数组第一个元素"echo ${arr[0]} #读取数组采用${数组名[下标]}echo "读取a数组中的所有元素"echo "${a[@]}" #使用@符号可以获取数组的所有元素echo "改变a数组的第三个位置数据的值"a[2]=13for ((i=0;i<${#a[@]};i++))do echo "a[$i]=${a[$i]}"doneecho "获得arr数组长度的两种方法"echo "length=${#arr[@]}"echo "length=${#arr[*]}"
测试结果:
6.Shell脚本实现Hill排序的过程
#!/bin/basharr=(0 8 9 7 4 5 -1)n=${#arr[@]}echo "未经过Hill排序的数组"for ((k=0;k<n;k++))do echo "arr[$k]=${arr[$k]}"donegap=$nwhile [ $gap -gt 1 ] do let gap=$gap/3+1 for ((i=0;i<n-gap;i++))#类C风格的for循环加C风格之外加()即可 do end=$i temp=${arr[$end+$gap]} for ((; end >= 0; end=end-gap)) do if [ $temp -gt ${arr[$end]} ] then break else arr[$end+$gap]=${arr[$end]} fi done arr[$end+$gap]=$temp donedonej=0echo "经过Hil排序之后的数组形式"while [ $j -lt ${#arr[@]} ]do echo "arr[$j]=${arr[$j]}" let j++done
测试结果:
阅读全文
0 0
- [Bash Shell] Shell学习笔记
- [Bash Shell] Shell学习笔记
- shell shell学习笔记001--什么是shell?
- shell学习笔记【原创】
- shell学习笔记2
- shell(bash)学习笔记
- Shell学习笔记
- shell学习笔记《一》
- Unix shell学习笔记
- shell编程学习笔记
- shell学习笔记
- Linux Shell学习笔记
- Shell学习笔记
- Power Shell 学习笔记
- Shell 编程-学习笔记
- shell编程学习笔记
- Shell学习笔记
- shell 学习笔记
- Java 网络IO编程总结(BIO、NIO、AIO)
- SQL优化(索引)
- UVA 1586
- Java源码阅读-HashMap
- HDU1894 String Compare 字符串比较
- Shell学习笔记
- 高频使用命令
- 最短单源路径之dijkstra算法
- CSU1569 Wet Tiles
- 互斥锁的使用
- Oracle查询语句
- SAN、NAS、SCSI、iSCSI等存储基础知识
- 503. Next Greater Element II
- 《程序员修炼之道:从小工到专家》提示与检查清单汇总