目录
0.前置知识
1.if参数
参数意义
-b
当
file
存在并且是块⽂件时返回
true
-c
当
file
存在并且是字符⽂件时返回
true
-d
当
pathname
存在并且是⼀个⽬录时返回
true
-e
当
pathname
指定的⽂件或⽬录存在时返回
true
-f
当
file
存在并且是⽂件时返回
true
-g
当由
pathname
指定的⽂件或⽬录存在并且**设置了
SGID
位**时返回为
true
-h
当
file
存在并且是符号链接⽂件时返回
true
,该选项在⼀些⽼系统上⽆效
-k
当由
pathname
指定的⽂件或⽬录存在并且设置了“粘滞”位时返回
true
-p
当
file
存在并且是命令管道时返回为
true
-r
当由
pathname
指定的⽂件或⽬录存在并且可读时返回为
true
-s
当
file
存在⽂件⼤⼩⼤于0时返回
true
-u
当由
pathname
指定的⽂件或⽬录存在并且**设置了
SUID
位**时返回
true
-w
当由
pathname
指定的⽂件或⽬录存在并且可执⾏时返回
true
-o
当由
pathname
指定的⽂件或⽬录存在并且被⼦当前进程的有效⽤户ID所指定的⽤户拥有时返回
true
2.Unix Shell里面比较字符写法
参数意义
-eq
等于
-ne
不等于
-gt
大于
-lt
小于
-ge
大于等于
-le
小于等于
-z
空串
=
两个字符相等
!=
两个字符不等
-n
非空串
1.算数运算符号
- Shell常见的算术运算符号:参见C算术运算符 - 多了一个
**
:幂运算
2.常见算数运算命令
0.常用算数运算命令
运算操作符与运算命令意义
(())
用于整数运算,效率很高
let
用于整数运算,类似
(())
expr
可用于整数运算,但还有很多其他额外功能
bc
Linux下的一个计算机程序(适合整数及小数运算)
$[]
用于整数运算
awk
即可以用于整数运算,也可以用于小数运算
declare
定义变量值和属性,
-i
参数可以用于定义整型变量,做运算
1.双括号(())
- 效率极高
- 注意:必须是整数,
(())
不支持浮点数,浮点数需要其他命令计算运算操作符与运算命令意义((i=i+1))
运算后赋值,不能用echo ((i=i+1))
的形式输出表达式的值,要用echo $((i=i+1))
输出i=$((i+1))
在(())
前加$
,表示将表达式运算后赋值给i``````((8>7&&5==5))
进行比较操作,还可以加入逻辑与和逻辑或,用于条件判断echo $((2+1))
需要直接输出运算表达式的运算结果时,在(())
前加$
- 简易Shell脚本示例:一个交互的计算器
#!/bin/bashUsage(){printf"Error! Please enter an integer\n"exit1}# 接收用户输入的命令,-p参数后面写给用户看到的提示信息read-p"Please input your number> " first# 进行对用户输入判断 --> if语句# 限制用户必须输入纯数字# []里面前后必须有一个空格,是固定语法# -n,如果字符串为空,则条件不成立,如果不为空,则条件成立# sed的作用是把字符串进行替换,把所有的数字都替换为空,那么就剩下其他的非数组内容了if[-n"`echo $first |sed's/[0-9]//g'`"]then Usagefiread-p"Please input your operator> " operatorif["$operator"!="+"]&&["$operator"!="-"]&&[$operator!="*"]&&[$operator!="/"]thenecho"只允许输入+-*/"exit2firead-p"Please input your number> " secondif[-n"`echo $second |sed's/[0-9]//g'`"]then Usagefiecho$(($first $operator $second))
2.let命令
- let命令等同于
(())
- 但是(())
效率更高 - 简易脚本示例:检测网页状态
#!/bin/bashCheckUrl(){timeout=0fails=0success=0whiletruedowget--timeout=$timeout--tries=1 snowk.x3322.net:9098 -q-O /dev/null # 如果状态码!=0,就报错if[$?-ne0]thenletfails+=1elseletsuccess+=1fiif[$success-ge1]thenecho"It's success :P"exit0fi# 如果出错次数大于2,就告警if[$fails-ge2]thenecho"It's dead :("exit2fidone}CheckUrl
3.expr命令
expr
命令允许在命令行处理数学表达式,简单的计算器命令 - 具体用法:expr --help
expr
命令并不是很好用,因为其基于空格传入参数- 很多符号在shell⾥有特殊含义,因此必须得转义使用- 示例
expr5 + 3expr5\* 6
expr
模式匹配-:
--> 计算字符串中的字符个数-.*
--> 任意字符串重复0次或多次 - 此处可以自定义想匹配的内容- 语法:expr 字符串 ":" ".*"
- 示例:expr SnowK.jpg ":" ".*\.jpg"
- 简单脚本示例: -
expr
判断文件名是否符合要求#!/bin/bashifexpr$1":"".*\.jpg"&> /dev/nullthenecho"This is a jpg file"elseecho"It's not a jpg file"fi
- 找出字符长度不大于6的单词#!/bin/bashforstrin I am SnowK, this is a exampledoif[`expr length $str`-le4]thenecho$strfidone
4.bc命令
- bc命令可以当作命令行计算器
- 直接
bc
可以进入交互式操作 bc
配合管道符计算:计算1~10的和echo{1..10}|tr" ""+"|bc
5.中括号[]
- 语法:
$[表达式]
6.awk计算
echo"4 8"|awk'{print $1+4*$2}'
版权归原作者 DieSnowK 所有, 如有侵权,请联系我们删除。