常用shell命令归纳总结

2022-07-19 10:50:20 浏览数 (1)

大家好,又见面了,我是全栈君。

一.首先,什么是shell

shell翻译成壳的意思,它是包裹在linux内核外层的,一个可通过一系列的linux命令对操作系统发出相关指令的人机界面。 shell可以通过其条件语句和循环语句等,把一系列linux命令结合在一起,形成一个相当于面向过程的程序,shell script,来实现一些较为复杂的功能。 总括,shell是linux命令集的概称,是属于命令行的人机界面。Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson的sh是第一种Unix Shell,Windows Explorer是一个典型的图形界面Shell。Shell 和Shell Script不是一回事,通常我们说的都是Shell Script。 由定义可知, shell相当于经过装饰的命令行,和命令行一样,都能操作linux。但是shell是面向过程的,相当于有了一定的逻辑和过程,而命令行只是单一的操作。

二.常用命令

1. telnet

代码语言:javascript复制
语法:telnet 主机名 或 telnet IP地址


telnet 130.129.21.250 

2.ll 文件或目录处理:列出文件或目录下的文件名。

语法: ls [-atFlgR] [name]

ls 列出目前目录下的文件名。

ls -a 列出包括以 .开始的隐藏文件的所有文件名。

ls -t 依照文件最后修改时间的顺序列出文件名。

ls -F 列出当前目录下的文件名及其类型。以/ 结尾表示为目录名,以* 结尾表示为可执行文件,以@ 结尾表示为符号连接。

ls -l 列出目录下所有文件的权限、所有者、文件大小、修改时间及名称。

ls -lg 同上,并显示出文件的所有者工作组名。

ls -R 显示出目录下以及其所有子目录的文件名。

3.cd 改变工作目录

代码语言:javascript复制
语法:cd [name]

name:目录名、路径或目录缩写。

cd - //返回到原来的目录

4.cp: 复制文件

代码语言:javascript复制
语法: cp [-r] 源地址 目的地址

cp -r dir1 dir2 复制整个目录。

5.mv : 移动或更改文件、目录名称

语法:mv 源地址 目的地址

6.mkdir: 建立新目录

语法: mkdir 目录名

7.rm 和rmdir: 删除目录

代码语言:javascript复制
语法: rmdir 目录名 或 rm 目录名

rmdir dir1 删除目录  dir1,但 dir1 下必须没有文件存在,否则无法删除。
rm -r dir1 删除目录  dir1及其子目录下所有文件

8.rm: 删除文件

代码语言:javascript复制
rm file? 删除文件名中有五个字符且前四个字符为file 的所有文件。

rm f* 删除文件名中以 f 为字首的所有文件。

9.pwd: 列出当前所在的目录位置

10.cat: 查看文件内容

代码语言:javascript复制
cat file1 以连续显示方式,查看文件名 file1 的内容。

11.more:分页查看文件内容

代码语言:javascript复制
语法: more 文件名 或 cat 文件名 | more

12.查看目录所占磁盘容量

代码语言:javascript复制
语法: du [-s] 目录

du dir1 显示目录 dir1 的总容量及其子目录的容量(以KB 为单位)。
du -s dir1 显示目录 dir1 的总容量(以KB 为单位)。
du -sh dir1 显示目录 dir1 的总容量(以M 为单位)。

13.文件权限的设定

(1)改变文件或目录的读、写、执行权限

代码语言:javascript复制
语法:chmod [-R] mode name

name :文件名或目录名

chmod -R 777 xml.go

(2)改变文件或目录的所有权

代码语言:javascript复制
语法:chown [-R] 用户名 name

chown vagrant  xml.go 

14. groups: 检查自己所属的工作组名称

15. touch:改变文件或目录的最后修改时间(没啥意义)

语法:touch name

16.grep “关键字” 文件名: 查询关键字在文件中的位置

grep string file

17.查找文件或命令的路径

代码语言:javascript复制
语法:whereis command 显示命令的路径。
语法:which command 显示命令的路径,及使用者所定义的别名。
语法:whatis command 显示命令功能的摘要。

sudo find / -name xml.go //查找文件的路径

18.比较文件或目录的内容

代码语言:javascript复制
语法:d i ff [-r] name1 name2
name1 name2:必须同时为文件名或目录名。

diff file1 file2 比较文件file1 与 file2 内各行的不同之处。
diff -r dir1 dir2 比较目录 dir1 与 dir2 内各文件的不同之处

19.进程控制

(1)查看系统中的进程

代码语言:javascript复制
语法:ps [-aux]
ps或ps -x 查看系统中,属于自己的进程。
ps -au 查看系统中,所有用户的进程。
ps -aux 查看系统中,包含系统内部的及所有用户的进程。

(2)结束或终止进程

语法:kill [-9] PID

(3)在后台执行进程的方式(不常用)

语法:命令 &

(4)jobs: 查看正在后台中执行的进程

20.history: 查看命令记录表的内容

!!: 重复执行前一个命令

! n: n代表记录表的命令编号

! cat : 重复前面执行过的以 cat 为起始字符串的命令。

显示前一个命令的内容

语法: ! !:p

21.文件的压缩

(1). 压缩文件

语法:compress 文件名 压缩文件

语法:compressdir 目录名 压缩目录

(2). 解压缩文件

语法:uncompress 文件名 解压缩文件

语法:uncompressdir 目录名 解压缩目录

22.| :管道命令的使用

语法:命令1 | 命令2 将命令1的执行结果送到命令2,做为命令2的输入。

23.输入/输出控制

(1)标准输入的控制

mail -s “mail test” 电子邮件地址 < file1 将文件file 当做信件的内容,主

题名称为 mail test,送给收信人。

代码语言:javascript复制
mail -s "mail test" xiaowangli@huashenggroups.com < xml.go

(2)标准输出的控制

代码语言:javascript复制
语法:命令 > 文件 将命令的执行结果送至指定的文件中。

ls -l > list 将执行 “ls -l” 命令的结果写入文件list 中。

语法:命令>! 文件 将命令的执行结果送至指定的文件中,若文件已经存在,则覆盖。

ll >list.txt
tail -30  xml.go>list2.txt

结果:list.txt内容

24.awk: 非常有用的一个文本处理命令,逐行运行,默认使用空格分割,-F 表示分割的样式

25,shell 语法

if then else : shell 文件

例子1:

代码语言:javascript复制
#判断文件是否存在

#!/bin/bash

if [ -f Af.php ];then
echo 'file exist'
else
echo 'file not exist'
fi

exit 0

执行shell文件

代码语言:javascript复制
bash test.sh 

结果:

例子2:根据输入判断正负数

注意:[ ] 内两边要空一格.关键词左右都要空一格

代码语言:javascript复制
#!/bin/bash
#提示用户输入一个值
echo -n "请输入一个数字:"

#保存用户输入的值到num中
read num

#[ ] 内两边要空一格
if [ "$num" -gt 0 ];then
echo '正数'
elif [ "$num" -lt 0 ];then
#elif [ "$num" -lt 0 ];then
echo '负数'
else
echo '零'
fi

exit 0

例子3:case 语句

代码语言:javascript复制
#!/bin/bash

echo -n "你单身吗? (y/n)"

read val

case $val in 
 Y|y)
echo "我们约会吧"
;;

N|n)
echo "不约,再见"
;;

*)
echo "输入有误"
;;

esac

exit 0

结果:

例子4:ls 列出当前目录中文件列表

代码语言:javascript复制
#!/bin/bash

#将结果存在CUL_DIR中
CUR_DIR=`ls`  #此处不是单引号,而是`` 撇号

#显示ls 的结果
echo $CUR_DIR

for v in $CUR_DIR
do
if [ -f $v  ];then
echo "FILE: $v"
fi
done

exit 0

计算输出 1-10 之间数字的总和

代码语言:javascript复制
#!/bin/bash

sum=0
for ((i=0;i<10;i  ))
do
((sum=$sum $i))
done

echo "sum=$sum"

exit 0

例子5:使用 break 和 continue 控制循环 break 命令允许跳出循环

continue 命令类似于 break 命令,只有一点重要差别,它不会跳出循环,只是跳过这个循环步。:[break 应用] 从 0 开始逐步递增,当数值等于 5 时跳出本次循环,等于10时停止递增。

代码语言:javascript复制
#!/bin/bash

#设置起开始值
val=0

while true
do
if [ "$val" -eq "5" ];then
#如果是val=5,则挑出循环
((val  ))
continue;
elif [ "$val" -eq "10" ];then
break;
else
#输出值
echo "val:$val"
#将数值加1
((val  ))
fi
done

exit 0

结果:

数组:

例子6:

数组定义:

  1. array=(10 20 30 40 50) 一对括号表示是数组,数组元素用 “空格” 符号分割开。引用数组时从序号 0 开始。
  2. var=”10 20 30 40 50″; array=($var)
  3. 除了上面的定义方式外,也可以单独定义数组:
代码语言:javascript复制
array[0]=10
array[1]=20
array[2]=30
array[3]=40
array[4]=50

数组操作:

代码语言:javascript复制
#!/bin/bash
array=(10 20 30 40 50)

#显示数组中所有元素
echo "数组列表:"
echo ${array[*]}
echo ${array[@]}

#显示数组第2项
echo "显示数组第二项"
echo ${array[1]}

#a显示数组长度
echo "显示数组长度:" ${#array[*]}
echo ${#array[@]}

#输出数组的第1-3项
echo "数组的第1-3项:" ${array[@]:0:3}

#将数组中的0替换成1
echo "将数组中的0替换成1" ${array[@]/0/1}

#删除数组的第2项
#unset 仅只是清除array[1]的值,并没有将array[1]删除掉 
echo '删除数组的第2项'
unset array[1]
echo ${array[@]}

exit 0

函数:

代码语言:javascript复制
#!/bin/bash

function foo()
{
 #定义局部变量i
 local i=0

 #定义局部变量total,传入foo 的参数总数
 local total=$#

 #输出参数总数
 echo "total param=$total"

 #输出传入foo的每一个参数
 for val in $@
 do
  ((i  ))
 echo "$i -- val= $val"
 done

#返回参数总数
return $total

}

foo
foo param1 param2 param3
echo "return value=$?"

exit 0
~        

数值运算

数值元算主要有4种实现方式:(())、let、expr、bc。 工作效率:(()) == let > expr > bc** (())和let是bash内建命令,执行效率高;而expr和bc是系统命令,会消耗内存,执行效率低。 (())、let和expr只支持整数运算,不支持浮点运算;而bc支持浮点运算。

代码语言:javascript复制
#!/bin/bash
#4 种方式计算3*(2 5)

#1.(())
val1=$((3*(2 5)))
echo "val1=$val1"

#2.let
let "val2=3*(2 5)"
echo "val2=$val2"

#3.expr
val3=`expr 3 * (5 2)`
echo "val3=$val3"

#4.bc
val4=`echo "3*(5 2)"| bc`
echo "val4=$val4"

第3,4种有问题

字符运算

代码语言:javascript复制
#!/bin/bash

str='hello world'

echo "显示字符串:" ${str}

echo '显示字符串长度:' ${#str}

echo '提取world:' ${str:6}

echo '提取or:' ${str:7:2}

echo '删除hello: '${str#hello}

echo '删除world: ' ${str%world}

echo '将所有的l替换为m: '${str//l/m} #此处l 前两个/,一个的话只会替换一个l

exit 0

bash 调试

bash [-nvx] scripts.sh

  • 选项与参数:
  • -n: 不要执行 script,仅查询语法的问题;
  • -v: 再执行 sccript 前,先将 scripts 的内容输出到屏幕上;
  • -x: 将使用到的 script 内容显示到屏幕上,这是很有用的参数!
代码语言:javascript复制
例子:想要执行 bash 脚本,并查看 bash 的调用流程,可以通过以下命令:

bash -x test.sh

echo [-neE] string

选项与参数:

  • -n: 输出内容之后,不换行。默认是输入内容之后,换行。
  • -e: 开启反斜线“”转义功能
  • -E: 开启反斜线“”转义功能(默认)。
  • 例子:输出 please input a number: 之后不换行

bash 内建指令

echo 在屏幕上显示出指定的字串 read 从标准输入设备读入一行,分解成若干字,赋值给 bash 程序内部定义的变量 alias 别名,alias l=’ls -al’ export export 可以把 bash 的变量向下带入子 bash (即子 bash 中可以使用父 bash 的变量),从而让子进程继承父进程中的环境变量。但子 bash 不能用 export 把它的变量向上带入父 bash。 exec 当 bash 执行到 exec 语句时,不会去创建新的子进程,而是转去执行指定的命令,当指定的命令执行完时,该进程(也就是最初的 bash)就终止了,所以 bash 程序中 exec 后面的语句将不再被执行。 . 使 bash 读入指定的 bash 程序文件并依次执行文件中的所有语句。 exit 退出 Shell 程序,在 exit 之后可有选择地指定一个数位作为返回状态。

参考:linux的命令行操作和shell的区别

bash 命令和语法

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/111514.html原文链接:https://javaforall.cn

0 人点赞