shell的一些使用
1、for循环
1.1数字性的循环
乘号前用反斜杠,expr说明后面的式子为表达式i*3+1
#!/bin/bash
for((i=1;i<=10;i++));
do
echo $(expr $i \* 3 + 1);
done
1.2字符性循环
输出当前目录下所有文件的文件名,用ls表示当前目录
#!/bin/bash
for i in `ls`;
do
echo $i ;
done
1.3路径查找
以file表示变量,in后接目录地址或者是某种类型的文件
example1:显示制定路径下的文件的文件名
#!/bin/bash
for file in /proc/*;
do
echo $file ;
done
example2:显示当前路径下所有sh格式的文件
#!/bin/bash
for file in $(ls *.sh)
do
echo $file ;
done
高级应用:对当前路径下所有ABCD格式的文件执行相应的操作,可以把ls换成指定的目录
#!/bin/bash
#Batch convert json file
source activate labelme
for file in `ls `
do
if [[ $file =~ \.json$ ]];then # [[ $file =~ \.ABCD$ ]] 匹配以.ABCD结尾的文件
python ~/labelme-master/labelme/cli/json_to_dataset.py $file
fi
done
2、echo
让你的终端输出文字显示绿色背景
echo -e "\e[1;42m=============== Dataset_preparation ===============\e[0m"
让你的终端输出文字变成红色
echo -e "\e[1;31m--Now convert the valid dataset...\e[0m"
效果图
3、read
直接read变量,如read var
4、case
example:判断用户输入是Y还是N来执行相应的操作
read comd
case $comd in
yes|y|Y)
sleep 3s
echo "yes"
;;
no|n|N)
echo "no"
;;
esac
5、if
5.1单分支if语句
if 判断条件;then
statement1
statement2
.......
fi
5.2if-else
if 判断条件;then
statement1
statement2
.....
else
statement3
statement4
fi
5.3多分支
if 判断条件;then
statement1
statement2
.....
elif 判断语句;then
statement3
statement4
else
statement5
fi
1)判断条件应该加中括号[],表示条件测试,这里空格很重要,注意在'['后面和']'前面都必须要有空格
2)在shell中,then和fi是分开的语句。如果要在同一行里面输入,则需要用分号将他们隔开。
3)if判断中对于变量的处理,需要加引号,比如[ -n "$var" ]
4)如果只单独使用>或者<号,系统会认为是输出或输入重定向,虽然结果显示正确,但是其实是错误的,因此要对这些符号进行转义
字符串判断
[ -z STRING ] 如果STRING的长度为零则返回为真,即空是真
[ -n STRING ] 如果STRING的长度非零则返回为真,即非空是真
[ STRING1 ] 如果字符串不为空则返回为真,与-n类似
[ STRING1 == STRING2 ] 如果两个字符串相同则返回为真
[ STRING1 != STRING2 ] 如果字符串不相同则返回为真
[ STRING1 < STRING2 ] 如果 “STRING1”字典排序在“STRING2”前面则返回为真。
[ STRING1 > STRING2 ] 如果 “STRING1”字典排序在“STRING2”后面则返回为真。
数值判断
[ INT1 -eq INT2 ] INT1和INT2两数相等返回为真 ,=
[ INT1 -ne INT2 ] INT1和INT2两数不等返回为真 ,<>
[ INT1 -gt INT2 ] INT1大于INT2返回为真 ,>
[ INT1 -ge INT2 ] INT1大于等于INT2返回为真,>=
[ INT1 -lt INT2 ] INT1小于INT2返回为真 ,<
[ INT1 -le INT2 ] INT1小于等于INT2返回为真,<=
逻辑判断
[ ! EXPR ] 逻辑非,如果 EXPR 是false则返回为真。
[ EXPR1 -a EXPR2 ] 逻辑与,如果 EXPR1 and EXPR2 全真则返回为真。
[ EXPR1 -o EXPR2 ] 逻辑或,如果 EXPR1 或者 EXPR2 为真则返回为真。
[ ] || [ ] 用OR来合并两个条件
[ ] && [ ] 用AND来合并两个条件
if应用:
判断目录$tmpDir是否存在,不存在就新建一个
if [ ! -d "$tmpDir"]; then
mkdir "$tmpDir"
fi
判断普通文件$tmpDir是否存,不存在就新建一个
if [ ! -f "$tmpDir" ]; then
touch "$tmpDir"
fi
判断$tmpDir是否存在,且是否具有可执行权限
if [ ! -x "$tmpDir"]; then
mkdir "$tmpDir"
chmod +x "$tmpDir"
fi
是判断变量$tmpDir是否有值
if [ ! -n "$tmpDir" ]; then
echo "$tmpDir is empty"
exit 1
fi
判断两个变量是否相等
if [ "$var1" = "$var2" ]; then
echo '$var1 eq $var2'
else
echo '$var1 not eq $var2'
fi
测试退出状态:
if [ $? -eq 0 ];then
echo 'ok'
fi
if利用read传参判断
#!/bin/bash
read -p "please input a score:" score
echo -e "your score [$score] is judging by sys now"
if [ "$score" -ge "0" ]&&[ "$score" -lt "60" ];then
echo "sorry,you are lost!"
elif [ "$score" -ge "60" ]&&[ "$score" -lt "85" ];then
echo "just soso!"
elif [ "$score" -le "100" ]&&[ "$score" -ge "85" ];then
echo "good job!"
else
echo "input score is wrong , the range is [0-100]!"
fi
判断文件是否存在
#!/bin/sh
today=`date -d yesterday +%y%m%d`
file="apache_$today.tar.gz"
cd /home/chenshuo/shell
if [ -f "$file" ];then
echo "OK"
else
echo "error $file" >error.log
mail -s "fail backup from test" aaa@qq.com <error.log
fi
number的比较:
if [ "$num" -gt "150" ]
echo "$num > 150"
fi
上一篇: Spring5源码编译
下一篇: PHP+Ajax调用简单漂亮的验证码
推荐阅读
-
JavaEE基础day02 1.定义Java中的变量 四类八种 2.变量定义和使用的注意事项 3.数据类型的转换、强制数据类型转换4.算数运算符、比较运算符、逻辑运算符、赋值运算符、三元运算符
-
Shell中去除字符串里的空格或指定字符的方法
-
webpack3、4的基本的使用方法
-
CentOS7中防火墙的一些常用配置介绍
-
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析
-
php中的一些数组排序方法分享
-
使用php生成图片,如何将文字放置到图片的中心?
-
详细介绍MvcPager分页控件使用的实例方法
-
有关jquery中form表单序列化的一些问题指导
-
关于sql查询的 一些问题