bash 编程实践
2018-03-03 21:58
316 查看
写在前面:之前从来没有想过去学习
下面的是我之前做的一篇
字符串比较
文件比较
数值比较
注意,只能处理正数,不能处理浮点数
数值条件测试可以用在数字和变量上
字符串比较
字符串的大小比较
文件比较
复合逻辑表达式
数字相加
用于高级字符串处理功能的双方括号
用于数学表达式的双括号
(( expression ))
可以在if语句中用双括号命令,也可以在脚本中的普通命令里使用来赋值。
注意,不需要将双括号中表达式里的大于号转义。这是双括号命令提供的另一个高级特性。
用于高级字符串处理功能的双方括号
支持正则匹配,比如
case 命令
语法格式是:
数值比较的例子:
可以在if语句中用双括号命令,也可以在脚本中的普通命令里使用来赋值。
字符串比较的例子:
文件比较的例子:
复合条件判断的例子:
使用双括号的例子:
使用双方括号的例子:
使用 case 命令的例子:
周日被我射熄火了,所以今天是周一,233333333……
shell编程,不过近期因为工作需要,不得不去学习一下。前期看,会感觉头大,被这么诡异的语法所震慑。但是,再看下去,会发现,
shell的语法其实比较简单,逻辑也比较严谨,不会出现像
js的那种不确定的语法。
下面的是我之前做的一篇
shell编程笔记,就放这里来了。
test 命令的用途(3种)
数值比较 (比较鸡肋,不如双括号好用,双括号在下面)字符串比较
文件比较
test的等价方式是
[ conditon ],注意
condition的前后都需要有一个空格,否则会出现语法错误
数值比较
注意,只能处理正数,不能处理浮点数
n1 -eq n2 ====> n1 == n2 n1 -ge n2 ====> n1 >= n2 n1 -gt n2 ====> n1 > n2 n1 -le n2 ====> n1 <= n2 n1 -lt n2 ====> n1 < n2 n1 -ne n2 ====> n1 != n2
数值条件测试可以用在数字和变量上
字符串比较
str1 = str2 =====> str1 == str2 str1 != str2 =====> str1 != str2 str1 < str2 =====> str1 < str2 str1 > str2 =====> str1 > str2 -n str1 =====> len(str1) != 0 -z str1 =====> len(str1) == 0
字符串的大小比较
>与
<会被理解成重定向操作,所以比较字符串需要转义。比如:
[ $str1 \> $str2 ],
[ $str1 \< $str2 ]
文件比较
-d file ====> 判断 file 是否存在是一个目录 -e file ====> 判断 file 是否存在[存在为真] -f file ====> 判断 file 是否存在并且是一个文件 -r file ====> 判断 file 是否存在并且可读 -s file ====> 判断 file 是否存在并且非空[非空为真] -w file ====> 判断 file 是否存在并且可写 -x file ====> 判断 file 是否存在并且可执行 -O file ====> 判断 file 是否存在并属当前用户所有 -G file ====> 判断 file 是否存在并且默认组与当前用户相同 file1 -nt file2 ====> 判断 file1 是否比 file2 新 [不会检查文件是否存在] file1 -ot file2 ====> 判断 file1 是否比 file2 旧 [不会检查文件是否存在]
复合逻辑表达式
[ condition1 ] && [ condition2 ] [ condition1 ] || [ condition2 ]
数字相加
a=12 b=13 c=$[$a+$b] ((d= $a**2 + $b**2)) # x=$[ $a+$b ] <====> ((x= $a+$b))
if-then 的高级特性(2个)
用于数学表达式的双括号用于高级字符串处理功能的双方括号
#! /bin/bash
用于数学表达式的双括号
(( expression ))
val++ ===> 后增 val-- ===> 后减 ++val ===> 先增 --val ===> 先减 ! ===> 逻辑求反 ~ ===> 位求反 ** ===> 幂运算 << ===> 左位移 >> ===> 右位移 & ===> 位布尔和 | ===> 位布尔或 && ===> 逻辑和 || ===> 逻辑或
可以在if语句中用双括号命令,也可以在脚本中的普通命令里使用来赋值。
注意,不需要将双括号中表达式里的大于号转义。这是双括号命令提供的另一个高级特性。
用于高级字符串处理功能的双方括号
支持正则匹配,比如
[[ $USER == ca? ]]
case 命令
语法格式是:
case $var in $a | $b ) # a 或者 b echo "xxx" echo "yyy" ;; # 每个分支结束需要进行的收尾 $c ) echo "ccc" ;; * ) echo "default" ;; esca # case 结束的收尾
数值比较的例子:
#! /bin/bash # 使用test 命令进行数值的比较 (作用于变量或者数字) var1=1333 var2=99 if test $var1 -lt 255 then echo "$var1 < 255" elif [ $var2 -ge 999 ] then echo "$var2 >= 999" else echo "$var1 + $var2 ----" fi
可以在if语句中用双括号命令,也可以在脚本中的普通命令里使用来赋值。
字符串比较的例子:
#! /bin/bash # 字符串比较 var="c9at" if [ $USER = $var ] then echo "当前用户是 $var" else echo "当前用户不是 $var" fi var2="c9AT" if [ $var \> $var2 ] then echo "$var > $var2" else echo "$var <= $var2" fi
文件比较的例子:
#! /bin/bash # 检查文件 path="/home" if [ -e $path ] then echo "$path exists" if [ -d $path ] then echo "$path is a dir" if [ -r $path ] then echo "$path can be read" if [ -w $path ] then echo "$path can be write" else echo "$path can not be write" fi else echo "$path can not read" fi else echo "$path is not a dir" fi else echo "$path not exists" fi
复合条件判断的例子:
#! /bin/bash # 复合条件表达式 [ condition1 ] && [ condition2 ] # 复合条件表达式 [ condition1 ] || [ condition2 ] a=12 b=13 c=$[$a+$b] echo "$a+$b==$[ $a + $b ]" if [ $a -lt $b ] && [ $c -eq 25 ] then echo "c=a+b=$c" else echo "$a -ge $b" fi
使用双括号的例子:
#! /bin/bash # 使用双括号[仅能用于数值操作] (( condition )) # 注意: # 1. 双括号仅用于数值运算 # 2. 双括号与 [ condition ] 形式不同,这里面的数值判断, # 不能用 -gt / -eq 这些,需要直接用 > < = 这些比较符号 var1=10 if (( $var1**2 > 90 )) then (( var2=$var1**3 )) echo "var2==$var2" fi if [ $[$var1**2] -gt 90 ] then echo "$var1**2 == $[$var1*$var1]" else echo "var1=== $var1" fi if (( $[$var1**2] == 100 )) then echo "var1 == $var1" else echo "var1 != 10" fi
使用双方括号的例子:
#! /bin/bash # [[ condition ]] 字符串比较操作 # [[ condition ]] 类似于 [ condition ] , 仅仅针对字符串,[[ var ]] 提供了正则匹配 if [[ $USER == ca? ]] # 看到了吗?这里 和 'ca?' 进行正则匹配比较 then echo "current user is $USER" else echo "### current user is $USER" fi
使用 case 命令的例子:
#! /bin/bash # case 命令,和 c/java 中 switch case 的用法类似 # 案例:周一到周五输出 "今天上班" ,周六输出 "今天休息" , # 其他情况输出 当前日期 # %w 星期几,0-6,0表示星期天 # %u 星期几,1-7,7表示星期天 # date 命令详解 :https://www.cnblogs.com/hunttown/p/5470527.html weekDay=$(date +%w) case $weekDay in 1 | 2 | 3 | 4 | 5 ) echo "今天是 $(date +%A)" echo "今天上班" ;; 6 ) echo "今天是 $(date +%A)" echo "今天休息" ;; * ) echo "今天是 $(date +%A) , 今天上王者" ;; esac
周日被我射熄火了,所以今天是周一,233333333……
相关文章推荐
- bash编程复习,实践和进阶练习
- bash脚本编程实践总结(图文)
- 动画编程的原理和实践
- 我拒绝接受的几个最佳编程实践方法(转自csdn)
- java并发编程实践笔记
- 基于visual c++之windows核心编程代码分析(35)实践NT服务的框架
- 基于visual c++之windows核心编程代码分析(36)实践SYN安全隐患监测
- 【机器学习实践(1)】配置python编程环境
- WCF与AJAX编程开发实践(2):支持ASP.NET AJAX的Web Service
- JAVA编程实践总结
- 由表单验证说起,关于在C#中尝试链式编程的实践
- Linux下more命令C语言实现实践 (Unix-Linux编程实践教程)
- 网络编程UDP总结及实践-C语言
- bash编程-cut、printf
- Hadoop实践(三)---MapReduce框架编程笔记
- 20130823C语言编程实践课第五天
- Cocos2d-x 类COC手游与RTS(即时战略)游戏的编程实践总结
- Sprite Kit编程指南(9)-Sprite Kit最佳实践
- Java编程细节之十个最佳实践
- Java网络编程实践和总结 --- 基于UDP的Socket编程