Shell常用命令

释放双眼,带上耳机,听听看~!

一说到命令行,我们真正指的是 shell。

shell 就是一个程序,它接受从键盘输入的命令, 然后把命令传递给操作系统去执行。

 

下面对于一些特殊符号,特殊操作符和注意事项做一些记录。

目录

1.$0,$1,$2…..$#的含义

1).$0

2).$1~$n 

3).$#

4)上级目录$(dirname "$PWD")

2.比较操作符

1)整数比较

2)字符串比较 

3)前面加x

3.重定向

5.定义变量不要有空格

7.在一行执行多条命令

8.判断条件

9.mount,cd,ls,cp

10.shopt 显示linux行为命令

11.文件编码格式的转换 iconv

12.处理文件名中的空格,可以正常显示带空格文件名

13.在shell中调用vim

14.awk,grep,find,cat,tr

awk

grep

find

cat

tr

PS:一些小脚本

1.批量去除文件名中的空格

2.输入有空格的文件名到文本中

3.读取文本中每一行(行中带有空格也行)


1.$0,$1,$2…..$#的含义

用于读取输入参数。

1).$0

Shell本身的文件名。test.sh:


1
2
1cd `dirname $0`  
2

含义为:用于取得脚本文件.sh 所在目录,然后将当前目录切换过去

ps:

1
1` ```` `

反引号 等同于$() ,  用于命令替换

命令替换是指 shell 可以先执行命令,将输出结果暂时保存,在适当的地方输出

下面例子用的 $() 进行命令替换


1
2
3
4
5
6
7
1files = $(ls *.txt)
2
3for filename in $files
4do
5   echo "$filename"
6done
7

for循环语法:

for 变量 in 取值列表
do
各种操作
done

2).$1~$n 

添加到Shell的各参数值。$1是第1参数、$2是第2参数…。test.sh: 


1
2
3
1cd `dirname $0`
2python test.py $1 $2 $3
3

3).$#

参数个数,从$1开始算,不算$0

 

4)上级目录$(dirname "$PWD")

比如:

$(dirname "$PWD")/tmp/文件名

tmp 这个文件夹一定要存在,如果不存在,就会说没有此目录。文件名可以不存在的。


2.比较操作符

用于比较数值大小以及字符串大小,有的比较操作符只能用 单词简写,有的比较操作符也可以用 对应的符号 来标识。注意区分数值大小 和 字符串大小的 是否相等是如何比较的。

[]中写判断条件

(())

" "

$

1)整数比较


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1等于
2-eq ,如:if [ "$a" -eq "$b" ]
3
4不等于
5-ne ,如:if [ "$a" -ne "$b" ]
6
7大于
8-gt ,如:if [ "$a" -gt "$b" ]
9>   (需要双括号),如:if(("$a" > "$b"))
10
11大于等于
12-ge ,如:if [ "$a" -ge "$b" ]
13>=  (需要双括号),如:if(("$a" >= "$b"))
14
15小于
16-lt ,如:if [ "$a" -lt "$b" ]
17<   (需要双括号),如:if(("$a" < "$b"))
18
19小于等于
20-le ,如:if [ "$a" -le "$b" ]
21<=  (需要双括号),如:if(("$a" <= "$b"))
22
23
24
25

2)字符串比较 


1
2
3
4
1= 等于,如:if [ "$a" = "$b" ]
2== 等于,如:if [ "$a" == "$b" ],与=等价
3!= 不等于,如:if [ "$a" != "$b" ]
4

 

3)前面加x


1
2
3
4
5
6
1if [ x"$1" == x"a" ];then  
2    echo right  
3else  
4    echo wrong  
5fi  
6

为什么比较前面要加x:

在一些UNIX系统:变量比较的时候,如果变量为空,或者未定义,这样会引起错误。

 


3.重定向

重定向是很常用的一个功能,来定制我们想要输入或者输出的地方。

介绍下在shell脚本中的三个文件。默认情况下,这三个文件处于打开状态:

  • 标准输入文件(stdin,默认标准输入文件为键盘输入)—-文件描述符是0   
  • 标准输出文件(stdout,默认标准输出文件为屏幕)—-文件描述符是1   
  • 标准错误文件(stderr,默认标准错误文件为屏幕)—-文件描述符是2 

 

关于重定向的符号:

  • 输出文件重定向符号 1>  (也可以简写为>)  

比如输出重定向到 file 文件,command > file,或者 command 1> file 

如果直接command,那么就是输出到屏幕中。

  • 错误文件重定向符号 2> 

command 2 > file:错误信息重定向到 file文件

  • 输出文件和错误文件统一重定向

command > file 2>&1:错误和输出都重定向到 file文件(command > file 表示输出重定向到file, 2>&1表示错误返回值传递给1输出通道,即file)

 或者

command &> file:&>file  意思是把标准输出 和 标准错误 都重定向到文件file中

 

 

ps:/dev/null是一个文件,这个文件比较特殊,所有传给它的东西它都丢弃掉。

.


5.定义变量不要有空格

mobileprovision_uuid=


1
2
3
1mobileprovision_uuid=`/usr/libexec/PlistBuddy -c "Print UUID" /dev/stdin <<< $(/usr/bin/security cms -D -i ${local_path}${certificateName})`
2echo ${mobileprovision_uuid} > ${WORKSPACE}/iOSProvisionCode.txt
3

ps:

1.PlistBuddy是Mac自带的专门解析plist的小工具,**“Print ”**代表 打印字段相应的值,这里指的是打印出 **“UUID”**字段的值 

2.

1
1` ```` `

反引号 等同于$() ,  用于命令替换

**3. <<< **https://unix.stackexchange.com/questions/80362/what-does-mean

**4.**连接字符串 ${var1}${var2}

5.command > .txt 输出重定向


7.在一行执行多条命令

&&

第2条命令只有在第1条命令成功执行(产生了0退出码)之后才执行

 

||

第2条命令只有在第1条命令**执行失败(产生了一个非0的退出码)**之后才执行

 

;

第2条命令在第1条命令执行完(不管是否成功)才执行


1
2
3
4
1if [ 条件判断语句 ];then
2else
3fi
4

8.判断条件

语法:


1
2
3
4
1if [ 条件判断语句 ];then
2else
3fi
4

 具体例子


1
2
3
4
5
6
7
1if [ ${HotUpdateResource} = &quot;true&quot; ];then
2    \cp -f ${WORKSPACE}/Release/android/**/*.zip /Users/banben/workspace/${upftpjob}/
3    \cp -f /Users/banben/workspace/${upftpjob}/*Android.zip /Users/banben/workspace/upyunwei
4else
5    echo &quot;HotUpdateResource is false&quot;
6fi
7

ps:

  1. \cp  直接拷贝覆盖不提示

9.mount,cd,ls,cp

mount: 查看当前挂在

cd: 移动到其他挂载

ls: 当前目录下的目录 (ls -l == ll )

cp:复制文件 cp oldfile newfile

#:注释

wc -l:统计输出的行数

sort -n test.txt | uniq: 去掉重复的行


10.shopt 显示linux行为命令

http://man.linuxde.net/shopt

查看当前的行为命令:比如 nocaseglob  为 off 就是 大小写敏感。

Shell常用命令

如何开启:

shopt -s nocaseglob

有什么用:

ls .txt 

如果nocaseglob选项是关闭的,就是搜出 txt的

如果nocaseglob选项是开启的,就是搜出 txt TXT 等都能匹配


11.文件编码格式的转换 iconv

iconv -f encoding [-t encoding] [inputfile]…

//IGNORE 忽略翻译不过来的的字符

find . -name $filename | xargs -I{} iconv -f GB2312 -t UTF-8//IGNORE {} -o $filename.text

如果 没有-o,就使用 >


12.处理文件名中的空格,可以正常显示带空格文件名

一般输入指令的时候,带空格文件名都要用 ' ' 括起来。


1
2
3
4
5
6
7
8
1SAVEIFS=$IFS
2IFS=$(echo -en &quot;\n\b&quot;)
3for f in *
4do
5  echo &quot;$f&quot;
6done
7IFS=$SAVEIFS
8

https://blog.csdn.net/u014717036/article/details/71105018


13.在shell中调用vim

vim -b 文件名<<-!

:s/old/new

:wq

!

https://blog.csdn.net/xxxxxx91116/article/details/7478117


14.awk,grep,find,cat,tr

Windows下Git Bash显示中文问题 https://www.jianshu.com/p/04f1c40c7f17

awk

删除每行的最后10个字符

awk '{sub(/.{10}$/,"")}1' test.unl  

grep

在文件中 搜索文件内容

grep -l  -i “string” *.txt

-l 列出文件内容符合指定的范本样式的文件名称。

-i 忽略字符大小写的区别

-r 递归遍历文件夹下面的文件

find

在目录下查找文件名的命令,比如查看空格

files=$(find . -name "* *")

cat

连接文件并打印到标准输出设备

经常用来显示文件内容

tr

可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。

tr -d ' '  去除空格


PS:一些小脚本

1.批量去除文件名中的空格


1
2
3
4
5
6
7
8
9
10
11
1SAVEIFS=$IFS
2IFS=$(echo -en &quot;\n\b&quot;)
3files=`find . -name &quot;* *&quot;`
4for name in $files
5do
6    echo &quot;$name&quot;
7    newname=$(echo $name | tr -d &quot; &quot;)
8    mv &quot;$name&quot; $newname
9done
10IFS=$SAVEIFS
11

2.输入有空格的文件名到文本中

当前目录

ls|grep " " > 1.txt 一行一行输入的是是文件名。

在ls的输出中 抓取有空格的文本 然后输入到1.txt 中

====================================

当前目录 以及子目录

find命令

find . -name "* *" -print > 2.txt 输入的文件名的区别 ./ 带有这种路径的。

3.读取文本中每一行(行中带有空格也行)


1
2
3
4
5
6
7
8
9
1SAVEIFS=$IFS
2IFS=$(echo -en &quot;\n\b&quot;)
3lines=$(cat 文件名)
4for line in $lines
5do
6    echo $line$
7done
8IFS=$SAVEIFS
9

4.复制文件的内容生成一个修改的文件,然后替换其中的一个字符,以及用新的文件名命名


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1#!/bin/bash
2
3for((i=1;i&lt;=12;i++));  
4do  
5   #创建文件
6   # expr 后面的是计算式
7   ireal=$(expr $i \* 8 + 1);
8   stri=$(expr $i + 1);
9   strireal=&quot;$ireal&quot;;
10  echo $stri;
11  s1=&quot;startvoice&quot;;
12  s3=&quot;.bat&quot;;
13  filename=$s1$stri$s3;
14  cp ./startvoice1.bat $filename;
15 
16  #找到匹配字符串并修改,要用到windows下,所以修改行尾符号
17   sed -i &quot;s/roomIdx=1/roomIdx=$strireal/g&quot; $filename
18   unix2dos $filename;
19done
20

https://blog.csdn.net/xxxxxx91116/article/details/7478117

给TA打赏
共{{data.count}}人
人已打赏
安全技术安全运维

Windows服务器如何发现被黑

2018-5-20 12:24:31

安全技术

详解Node.js API系列 Crypto加密模块(2) Hmac

2021-12-21 16:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索