欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell的一些使用

程序员文章站 2022-03-19 13:27:37
...

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

shell的一些使用

让你的终端输出文字显示绿色背景

echo -e "\e[1;42m=============== Dataset_preparation ===============\e[0m"

让你的终端输出文字变成红色

echo -e "\e[1;31m--Now convert the valid dataset...\e[0m"

效果图

shell的一些使用

 

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

相关标签: shell