shell for循环命令行_Shell+Regex 复习笔记(9044)

Shell

shell的语法类似python,不需要 ;

Windows上使用shell 1.下载Git: https://www. git-scm.com/download/wi n
2.在目标.sh文件夹中右键打开Git.bash
3.命令行输入 sh test.sh 123

特别提醒:一定要使用这种 a=10 而不是 a = 10 =两边不要留空格,不要留空格

更改shell脚本权限

chmod u+x shell.sh                               将shell权限变为可执行文件

标准头部写法

#!/bin/bash					 标准的头部写法

变量使用

shell中变量定义必须赋予初值  a=10,后续用a的时候使用 $a

读取外部参数

$#			      传递给脚本的参数个数
$@			      传递给脚本所有的参数
$0                            当前脚本的名字
$1                            传递给脚本的第一个参数(后面依次类推)

例:./test.sh COMP|head       此处读入的外界参数只有COMP,管道后面的并不会被当作参数

if的4种模式

=方式一
if(($# != 2)) 2>/dev/null	  (())类似于python中的判断格式
then				  2>/dev/null意为输出错误不再显示到屏幕上,而是到null里
	echo "$#"
else				  else后不用加then
	echo "Hello"
fi

方式二						
elif [ $# -ne 2 ]		  [ ]功能等同于test,使用-eq这些,而不是==
then			          [ ]中每个字符之间都要有空格
	echo "$#"
fi

方式三
elif [[ $# < 5 && $# > 2 ]]       [[ ]]非常强大,可以使用逻辑表达式,也可以使用=~正则表达式
then
	echo "$#"
fi

方式四
elif test -e $file	          test测试后会返回一个值真或假,可测试数字、字符文件 
then	
         echo "Exist"              -e,-r为检测文件是否存在(注意此处的比较项要加-,而perl中不用)
fi

------test强调内容
=与!=

test详解

= 与 !=                    字符串匹配判断(perl里使用eq,切记没有-)
-gt,-eq,-ne,-lt             数字大小判断(perl 里使用==与!=)
-e,-r			    判断文件存在,判断文件存在且可读
-a			    and  例:if test $a -gt 10 -a -lt 15
-o                          or

2种for循环

方式 一
for((i=1;i<=10;i++))	  注意此处是双括号
do
	echo "Hi"
done

方式 二
for i in $(seq 1 10)
do
	echo $i
done

依次读取目录下的文件

for file in *.jpg             读取当前目录下所有的.jpg文件
do
	png=$(echo "$file" | sed 's/jpg/png/g')					  
	#操作变量的时候要加$,类似Vue的语法
	#此处转换.jpg为.png,注意此处的echo,它有打开此文件的作用,若无可能无法将值赋给变量png
done

------------------
for file in *		       读取当前目录所有文件

echo的用法

echo 

d98343a752ec0ae341731de4507dde33.png

赋值命令行结果给变量

test=$()
test=``					 

加减运算

num=$(($1 + 1))    		       使用双括号进行运算赋值,$()这种无法进行计算会报错
num=$(expr $1 + 1)		       请注意,每个字符之间一定要有空格,一定要有空格

其余常用命令

basename

name=`basename /tmp/test/file.txt`   			输出为file.txt
name1=`basename /tmp/test/file.txt .txt`		输出为file

diff

diff file1 file2 >dev/null 2>&1		        比较结果不输出到屏幕

---------------重点来了
if  [ "$?" == "0" ];then			$?是对比结果返回值
    echo "the file or dir is same!"
else 
     echo "the file or dir is different!"
fi

exit

exit 0				           退出并返回0
exit 1                                     退出并返回1

convert

convert "a.jpg" "a.png"		           将jpg图片转换为png

read

read address 				    读取外界输入并将其值赋给address
echo $address

cp

cp file1 file2				     将file1复制成file2
cp -p					     保留源文件各种信息及属性

mv

mv aaa bbb				     将文件名aaa改为bbb
mv aaa info/			             将文件移动到info/文件夹

display

display shell.png			     打开一张图片

Regex

格式: egrep '匹配的内容' 目标文件 | 第二步操作
作用: 从目标文件中读取出包含匹配内容的 一整行,而不是要匹配的字符串片段
说明: 匹配内容里不需要用转义符,这与s///g不同
小技巧:使用特殊的标点符号作为匹配的标志可以提升效率

b0f167977de5a1246d425a0bd2a08b72.png

常用匹配规则

[aeiouAEIOU]			从中随机选择一个
[0-9]{4}		        从中选择4个
.*				匹配任意字符
w				匹配单词
d				匹配数字
^abc				以abc为开始
^(abc)				以abc为开头
[^abc]				不包含abc
abc$				以abc为结尾
'|'				匹配内容里|表示或者
+				至少匹配1个
?			        至少匹配0个
()				同传统意义上的括号

常用选择项

-v						不包括匹配出的结果
-i						忽略大小写,在perl中为//i

cut

例子: abc,123,456,afg  		   
cut -d',' -f2					  注意此处是f2,取出123
cut -d',' -f2,3					  取出123 456		

sort

sort用法(单独使用为按字母顺序排序)
-n或-nr				       按数字大小进行排序
-r				       反向排序
-u				       排序结果去掉重复项

与unqic一起使用
sort aim.txt | unqic -c | sort -n      unic去重,-c显示重复行数量

f20437f879032b3c4172e0bf2539978a.png

wc

wc <aim.txt
-l					              只显示行数
-w                                                    只显示字数

-----------
如果是用管道则为   | wc -l |                          不需要<符号

tail

tail -1                                               显示最后一行

tr

tr '0123456789' '<<<<<5>>>>'                          将0-9转换按规则为后面

sed

sed				            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值