Shell总结

>>强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!


Shell总结


概念:

Shell是外壳的意思,就是操作系统的外壳。我们通过shell命令来操作和控制系统。

使用:

  1. #! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序

  2. 定义变量不需要加 $ ,eg: yourname = "www"

  3. 使用变量需要加上 $ ,最好加上{ }。eg : echo ${yourname}

  4. 只读变量 readonly ,表示只会读,不会更改,例如变量加上了就不会改变了,eg: readonly yourn

  5. 删除变量 unset ,eg: unset yourname

  6. 变量类型有3种。运行Shell时会存在3中变量

  1. 局部变量:在脚本或命令中定义,仅在当前shell中有效,其他shell启动程序不能访问

  2. 环境变量:所有程序,都可以访问

  3. shell变量:由shell程序设置的特殊变量

  1. shell字符串分单引号和双引号

区别:(1)单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

        (2)单引号字串中不能出现单独一个的单引号(对引号使用转义符也不行),但可成对出现,作为字符串拼接使用。

        (3)-e 表示使用了转义功能,-n 表示输出完不换行

        (4)获取字符串长度#, eg: echo ${#myname}

        (5)提取子字符串 eg: echo ${myname:1:4} //表示从第二个开始,截取4个字符

        (6)查找字符串 `expr index "$myname" w`


  1. shell字符串分单引号和双引号

区别:(1)单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

        (2)单引号字串中不能出现单独一个的单引号(对引号使用转义符也不行),但可成对出现,作为字符串拼接使用。

        (3)-e 表示使用了转义功能,-n 表示输出完不换行

        (4)获取字符串长度#, eg: echo ${#myname}

        (5)提取子字符串 eg: echo ${myname:1:4} //表示从第二个开始,截取4个字符

        (6)查找字符串 `expr index "$myname" w`

  1. shell数组,只支持一维数组.用空格进行分割。eg: 数组名=(v1 v2 v3 ...)

  1. 读取数组 echo ${array[@]} 使用@符合可以读取数组中所有元素

  2. 获取数组元素长度 ${#array[@]} 或者 @ 变为 *

  1. 注释,单行注释 # 。多行注释 :<<EOF xxxxxxx EOF

  2. 传递参数,脚本内获取参数的格式为$n.  eg: ./test.sh 1 3 4 ,test中写$0,$1,$2....

  1. $# 传递到脚本参数的格式

  2. $* 以一个单字符串显示所有传递参数。“$1 $2 $3 ...”

  3. $$ 脚本运行的当前进程ID号

  4. $! 后天运行的最后一个进程的ID号

  5. $@ 与$* 相同,“$1” "$2" "$3" ...

  6. $- 显示shell使用的当前选项,与set命令功能相同

  7. $? 显示最后命令的退出状态。0表示没有错误,其他都表名是有错误的

  1. shell运算符

  1. 算术运算符:注意表达式和运算符之间有空格. eg: [ $a == $b ]。乘号要加

  2. 关系运算符:只支持数字,不支持字符串。除非字符串是数字。

Shell总结


  1. 布尔运算符

Shell总结

Shell总结

Shell总结


  1. echo test printf命令。

  1. read 从标准输入中读取一行,并将输入行的每个字符的值指定给shell变量

  2. -e 开启转义,n 换行,c不换行,> ,eg: echo "testt" > myfile。结果定向至文件

  3. echo `date` 输出日期

  4. printf format-string 参数,format-string为格式控制字符串,%s%c%d%f

  5. test用来检查某个条件是否成立。if test 条件

  1. 流程控制

case word in;

until 执行一个命令到true为止 是和while反过来的

注意:

for((int i=0;i<=5;i++)); do  action  done,这样可以遍历

  1. 函数,使用时不要加()

eg. demo(){

  action

}

demo

  1. 输入输出重定向

Shell总结

Shell总结


  1. 文件包含

  1. 使用外部文件脚本

. filename 或 source filename

eg : source ./test1.sh ,这样就可以使用test1.sh 的变量

原理:

注意:

  1. let可以进行赋值。

  2. awk 文本分析,

面试:

阿里面试题:

https://www.cnblogs.com/andy-zhou/p/5321839.html

  1. Shell脚本是什么、它是必须的吗

答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务

  1. 什么是默认登录shell,如何改变指定用户的登录shell

答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。使用chsh命令可以改变默认的shell。eg : chsh username -s

3.可以在shell脚本中使用哪些类型的变量

4.如何将标准输出和错误输出同时重定向到同一位置?

答:这里有两个方法来实现:

方法一:

    2>&1 (# ls /usr/share/doc > out.txt 2>&1 )

方法二:

&> (# ls /usr/share/doc &> out.txt )

5.shell脚本中“?”标记的用途是什么?

答:在写一个𝑠ℎ𝑒𝑙𝑙脚本时,如果你想要检查前一命令是否执行成功,在𝑖𝑓条件中使用“?”可以来检查前一命令的结束状态.0表示正常

6.在shell脚本中如何比较两个数字?

-gt

7.如何使脚本可执行

chmod +x test.sh

8.“#!/bin/bash”的作用

答:#!/bin/bash是shell脚本的第一行,称为释伴(shebang)行。这里#符号叫做hash,而! 叫做 bang。它的意思是命令通过 /bin/bash 来执行。

9.shell脚本中for循环语法

for variable in list_of_items

do

    action

done

10.如何调试shell脚本

答:使用’-x’参数(sh -x myscript.sh)可以调试shell脚本。另一个种方法是使用‘-nv’参数( sh -nv myscript.sh)。

11.shell脚本如何比较字符串

答:test命令可以用来比较字符串。测试命令会通过比较字符串中的每一个字符来比较.

12.Bourne shell(bash) 中有哪些特殊的变量

Shell总结


14.如何在shell脚本中使用BC(bash计算器)

  答:使用下列格式,在shell脚本中使用bc:

variable=`echo “options; expression” | bc`

15.如何在后台运行脚本

nohup command&

16.&和&&有什么区别

&:希望脚本在后台运行时候使用它

&& 当前一个脚本成功完成才执行后面的命令/脚本的时候使用它

17. 如何使用awk 列出uid小于100的用户

awk -F: '$3<100' /etc/passwd

18.如何列出第二个字母是a或b的文件

ls -d ?[ab]*

19.  [ $a == $b ] 和[ $a -eq $b ] 有什么区别

       [ $a == $b ] - 用于字符串比较

       [ $a -eq $b ] - 用于数字比较

20. = 和 == 有什么区别

      = - 用于为变量赋值

      == - 用于字符串比较

21.如何获取一个文件每一行的第三个元素 ?

awk'{print $3}'







- THE END -

作者简介

Shell总结

Mr.W

白天搬砖,晚上砌梦想。

相信每个人有故事,程序员更是有许多事故,书写最接地气的程序员故事,为大家找出更好的资料。

Shell总结


原文始发于微信公众号(JAVA的学习之路):Shell总结