Bash 脚本语法
每次学了忘,忘了学,怎么记不住,因为长时间不用了
Bash 流程控制
循环
for循环
for item in $list
do
echo $item
done
另一种与C语言类似的写法
for((i=; i<; i++))
do
echo $i
done
双括号是个非常好的东西!
还有一种
for i in $(seq 5)do
done
seq还有第三个参数表示step
更叼的
for i in {..}
do
done
还可以指定{1..10..step}
条件分支
if [ -f $file_path ]; then
#do_something
fi
if 后面跟条件如为0则进入then分支,这个和C/C++不同,因为bash主要用来根据一些命令的成功与否进行进一步的操作,命令执行成功则返回0,失败则非零
一般在if后面总是跟个中括号,但它不是bash语法的一部分,[ 也是一个命令,是bash的内建命令,它的参数以]结尾,与命令test功能一致
条件取反
加!即可
类似C中的Switch语句
case "$VAR" in
itemA) cmd;;
itemB) cmd;;
*) cmd;;
esac
item可以使用通配符
常用文件检测
- -a file :file 存在
- -d file :file存在并是一个目录
- -e file :file 存在,同- a
- -f file :file 存在并且是一个常规的文件(不是目录或者其他特殊类型文件)
- -r file :有读的权限
- -s file :文件存在且不为空
- -w file :有写的权限
- -x file :有执行的权限,或者对于目录有search的权限
- -N file :在上次读取后,文件有改动
- -O file :own所属的文件
- -G file :group所属的文件
- file1 -nt file2 :file1 比 file2 更新,以最后更新时间为准
- file1 -ot file2 :file1 比 file2 更旧 ,以最后更新时间为准
常用整数判断
- -eq 等于 if [ "$a" -eq "$b" ]
- -ne 不等于 if [ "$a" -ne "$b" ]
- -gt 大于 if [ "$a" -gt "$b" ]
- -ge 大于等于 if [ "$a" -ge "$b" ]
- -lt 小于 if [ "$a" -lt "$b" ]
- -le 小于等于 if [ "$a" -le "$b" ]
- 另外可以使用(( ))在双括号内进行C风格的比较
numa=1
numb=2
if (($numa > $numb)); then
echo "$numa > $numb"
else
echo "$numa < $numb"
fi
常用字符判断
= 等于 if [ "$a" = "$b" ]
== 等于if [ "$a" == "$b" ] 与=等价.
<小于, 按照ASCII字符进行排序
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ] 注意"<"使用在[ ]结构中的时候需要被转义.
>大于, 按照ASCII字符进行排序
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ] 注意">"使用在[ ]结构中的时候需要被转义.
-z 字符串为"null", 意思就是字符串长度为零
-n 字符串不为"null".
S=a if [ "$S" == "b" ];then
echo "char is b"
elif [ "$S" == "a" ];then
echo "char is a"
else
echo "char is $S"
fi
尽量使用if与then在一行的方式,否则比较容易出错。
[]中使用条件与/或需要使用-o -a 进行连接不能用&&,||,但是[[]]可以,所以还是用[[]]吧,计算上也是使用(())来的方便
函数
sayhello() {
if [ $# -ge 1 ];then
echo "hello $1!"
else
echo "hello!"
fi
} sayhello 'my friends'
函数调用时没有括号
参数参数通过dollar1,dollar2...获取
参考:
http://www.21andy.com/manual/advanced-bash-scripting-guide/comparison-ops.html
最新文章
- [软件推荐]转换html到chm的软件,winchm pro
- 【数据结构与算法分析——C语言描述】第二章总结 算法分析
- 一个统计目录文件大小的php函数
- XML新增、修改、选择
- codeforces 432D Prefixes and Suffixes
- React-Native获取文本框的值
- 通过配置Tomcat,让Android真机通过局域网访问PC的文件
- C#实现Web文件上传的两种方法
- 使用CSS3中的input标签与lable标签组合实现banner图的切换
- 嵌入式Linux引导过程之1.2——Xloader的XLOADER_ENTRY
- lambda表达式Expression<;Func<;Person, bool>;>; 、Func<;Person, bool>;区别
- UWP Acrylic Material
- 终于不再在懵逼mysql原生语句,orm超级登场
- hadoop框架详解
- Vue解决同一页面跳转页面不更新
- 【iCore4 双核心板_ARM】例程三:EXTI中断输入实验——读取ARM按键状态
- Servlet知识点回顾
- if 判断语句
- 列表批量删除和单个删除共用一个方法传递集合到Controller
- 感恩节MathType公式编辑器6折优惠启动