shell的基本知识

什么是 shell

  • shell 也是操作系统中的一个软件,它包在 linux 内核的外面,为用户和内核之间的交互提供了一个接口。系统中的命令用 shell 去解释shell接收系统回应的输出并显示其到屏幕中。
  • bash = GNU Bourne-Again Shell

在这里插入图片描述

交互式shell和非交互式shell

  • 交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。
  • shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。

shell的类型

在UNIX中主要有:

  • Bourne shell (包括 sh,ksh,and bash)
  • Bourne shell (sh)
  • Korn shell ( ksh)
  • Bourne Again shell ( bash)
  • POSIX shell ( sh)
  • C shell (包括 csh and tcsh)
  • C shell ( csh)
  • TENEX/TOPS C shell ( tcsh)
    具体信息点击百科 shell

什么是shell脚本

Shell Script ,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。

  • 脚本是一种解释型语言
  • 用 shell 脚本保存执行动作
  • 用脚本判定命令的执行条件
  • 用脚本来实现动作的批量执行

shell与shell脚本的区别

shell和shell脚本有什么区别?
确切一点说,Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言(就是你所说的shell脚本)。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行

如何创建新 shell 脚本

vim script.sh用 vim 编写脚本
#!/bin/bash脚本使用的解释器,通常用幻数 “#!” 指定
#AUTHOR脚本作者
#DATE脚本创作时间
#MAIL脚本作者联系方式
#VERSION脚本的版本

给shell添加表头的设置

在vim编辑器的配置文件/etc/vimrc中的最后一行添加下面内容,可以在新建一个.sh文件时自动添加你所设置的表头信息:

  • 进入.sh文件后按快捷键添加
map <F9> ms:call WESTOS()<cr>'s    
function WESTOS()
        call append(0,"####################################")
        call append(1,"# Author:                          #")
        call append(2,"# Create_Time:      ".strftime("%Y-%m-%d")."     #")
        call append(3,"# Version:                         #")
        call append(4,"# Mail:                            #")
        call append(5,"# Description:                     #")
        call append(6,"#                                  #")
        call append(7,"#                                  #")
        call append(8,"####################################")
        call append(9,"")
        call append(10,"#!/bin/bash")
endfunction

funtion ()定义一个函数
call调用
0 第一行
endfunction
map 快捷键
cr 关闭属性
两段 .
三段 . .

  • 自动添加,即新打开一个.sh文件或.script文件,自动加入下面内容的设置:
autocmd BufNewFile *.sh,*.script exec ":call WESTOS()"
function WESTOS()
        call append(0,"####################################")
        call append(1,"# Author:                          #")
        call append(2,"# Create_Time:      ".strftime("%Y-%m-%d")."     #")
        call append(3,"# Version:                         #")
        call append(4,"# Mail:                            #")
        call append(5,"# Description:                     #")
        call append(6,"#                                  #")
        call append(7,"#                                  #")
        call append(8,"####################################")
        call append(9,"")
        call append(10,"#!/bin/bash")
endfunction

vim 里一个tab键默认是8个空格,在/etc/vimrc中可以修改
buf 新属性
exec 执行,打开一个新的.sh,会自动执行
.script,第二次打开会识别

设置完成的效果如下:
在这里插入图片描述

脚本示例

vim hello.sh
#!/bin/bash
#AUTHOR:zhangyiwen
#VERSION:1.0
#MAIL:zhangyiwen@westos.org
#DATE:2019-06-10
echo "hello world!"

执行结果:
在这里插入图片描述

脚本的调试

Shell本身提供一些调试方法选项:

参数说明应用
-n只读取shell脚本,但不实际执行测试shell脚本是否存在语法错误
-x进入跟踪方式,显示所执行的每一条命令使shell在执行脚本的过程中把它实际执行的每一个命令行显示出来
-c从strings中读取命令临时测试一小段脚本的执行结果
-v一边执行脚本,一边将执行过的脚本命令打印到标准输出。
sh -x scritps.sh
vim scripts.sh      适用于所有 shell 脚本
#!/bin/bash -x      shell 脚本必须有x权限

举例:

vim hiya.sh
ech0 hiya     ##ech0为错误的命令

在这里插入图片描述

shell 脚本的执行

  • 5种方法:

sh script.sh
source script.sh
. script.sh
chmod +x script.sh
./script.sh

举例:
我们在真机的/mnt下写一个这样的脚本:

vim test.sh

#!/bin/tcsh
watch -n 1 date

chmod +x test.sh   给脚本添加执行权限

我们分别用5种方法来执行:

1> sh

在这里插入图片描述

2>source test.sh

source 是 Shell 内置命令的一种,它会读取脚本文件中的代码,并依次执行所有语句。source 命令会强制执行脚本文件中的全部命令,而忽略脚本文件的权限。
在这里插入图片描述

3> . test.sh

在这里插入图片描述

4> . /test.sh

. / 表示当前目录,意思是执行当前目录下的 test.sh 脚本。如果不写. /,Linux 会到系统路径(由 PATH 环境变量指定)下查找 test.sh,而系统路径下显然不存在这个脚本,所以会执行失败。
通过这种方式运行脚本,脚本文件第一行的解释器一定要写对,好让系统查找到正确的解释器。
在这里插入图片描述

5> /mnt/test.sh

在这里插入图片描述
再举一个例子:
在这里插入图片描述
总结

source 在当前的shell中生效
sh test.sh 开启一个新的shell
./test.sh = /mnt/test.sh 开启一个新的shell,文件第一行写的
source test.sh = . test.sh source运行脚本可以不加第一行,不过只能在shell中运行。

脚本练习

1.执行 ip_show.sh,显示当前主机的 ip 地址

在虚拟机中执行 ip_show.sh eth0,可以显示 eth0 的信息。
思考:如果没有 eth0

代码如下:

#!/bin/bash
[ -z "$1" ] && {
        echo : "Error:Please input device name!"
        exit
}
ifconfig $1 &> /dev/null || {
        echo "$1 is not exist"
        exit
}
ifconfig $1 | awk '/inet\>/{print $2}'
2.执行 user_show.sh,显示当前主机中能登陆系统的用户

在虚拟机中执行 user_show.sh,显示当前系统中可以登陆的用户名称
思考:能登陆系统的用户的特性是什么。
/etc/passwd文件最后一列以sh结尾的用户都可以登陆系统。
第1种.

#!/bin/bash
awk -F : '/sh$/{print $1}' /etc/passwd

第2种.

#!/bin/bash
grep sh$ /etc/passwd | cut -d : -f 1

第3种.

#/bin/bash
sed -n '/sh$/p' /etc/passwd | awk -F : '{print $1}'
3.执行 host_message.sh,显示当前主机的名称, ip ,以及能够登陆系统的用户

在虚拟机中执行 host_message.sh
显示当前系统 ip ,当前用户名称,当前目录,当前主机名称

#!/bin/bash
ifconfig eth0 | awk '/inet\>/{print $2}'
echo $USER
pwd
hostname

执行如下:
在这里插入图片描述

4.执行clear_log.sh,执行命令后可以清空日志

在虚拟机中执行 clear_log.sh,脚本执行后系统日志清空
日志文件在这里: /etc/rsyslog.conf
为了证明所有日志文件都被清空,我们在 /etc/rsyslog.conf下指定,将所有类型所有级别的日志都定向采集到/mnt/westos下,修改后重启服务。
在这里插入图片描述

vim /etc/rsyslog.conf
systemctl restart rsyslog.service
#!/bin/bash
Max_Line=`sed -n '$=' /etc/rsyslog.conf`
Target_Log=`grep RULES /etc/rsyslog.conf -A $Max_Line | awk '!/^#/&&!/^$/{print $2}'|sed '/^:/d;s/-//g'`
echo $Target_Log
for Log_File in $Target_Log
do
        > $Log_File && {
                echo $Log_File is clear !!
        }
done

升级版,判断用户的身份,只有root用户可以清空日志

[ "$USER" = "root" ] ||{
        echo "Error : This script must run as root !!"
        exit
}
Max_Line=`sed -n '$=' /etc/rsyslog.conf`
Target_Log=`grep RULES /etc/rsyslog.conf -A $Max_Line | awk '!/^#/&&!/^$/{print $2}'|sed '/^:/d;s/-//g'`
echo $Target_Log
for Log_File in $Target_Log
do
        > $Log_File && {
                echo $Log_File is clear !!
        }
done
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: b'shell脚本基础知识'是指对b'shell脚本'进行基础掌握的知识,包括b'shell脚本'的语法、变量、流程控制、函数等基础内容。了解b'shell脚本基础知识,可以帮助用户更好地编写和运行b'shell脚本',提高工作效率和准确性。 ### 回答2: Shell是一种可以执行Linux命令的脚本语言,是Linux系统中必不可少的一部分。Shell脚本是一种文本文件,其扩展名通常为.sh或.bash。Shell脚本可以编写一些自动化的任务,使得Linux操作更加方便和高效。 Shell脚本基础知识包括以下内容: 1. Shell脚本的创建和执行 Shell脚本可以使用vi或其他文本编辑器创建,创建完成后用chmod命令设置为可执行权限。执行脚本有两种方式:直接输入脚本名,或用bash命令执行脚本。例如,执行名为test.sh的脚本,可用以下两种方式: ./test.sh bash test.sh 2. Shebang行 Shell脚本的第一行需要写上Shebang行,指定解释器的路径。在Linux系统中,默认的解释器为/bin/bash。因此,Shebang行通常是: #!/bin/bash 3. 变量和环境变量 Shell脚本中使用的变量需要先定义,然后才能使用。定义变量的方式为: 变量名=变量值 变量名前面必须添加美元符号$,才能获取到变量的值。可以使用echo命令输出变量值,例如: name="tom" echo $name 环境变量是一种全局变量,可以在Shell脚本中使用。Linux系统中有很多预定义的环境变量,例如: $HOME:当前用户的家目录。 $PATH:程序搜索路径。 $USER:当前登录用户的用户名。 4. 控制流语句和函数 Shell脚本支持各种控制流语句,例如if、for、while等。函数的定义和使用也和其他编程语言类似,例如: function_name(){ commands } function_name 5. 输入和输出重定向 在Shell脚本中,可以使用重定向符号>和<来重定向输入和输出。例如,将输出重定向到文件中,可以使用: echo "hello" > output.txt 将输入重定向到文件中,可以使用: read input_var < input.txt Shell脚本基础知识是编写自动化任务的基础,了解和掌握这些知识可以使得Shell脚本更加高效和便捷。 ### 回答3: Shell脚本是一个用来编写命令行脚本的脚本语言。脚本语言和编译型语言不同,它的代码不需要被编译成可执行文件,而是直接解释执行。 Shell脚本的特点是读写文本文件,执行系统命令。在Unix/Linux操作系统中,Shell是最基本的界面,与其他操作系统类似,用户可以在Shell界面下输入各种命令来控制和操作计算机系统。 Shell脚本的基础知识包括: 1. Shell脚本的文件格式,一般以.sh作为文件扩展名,脚本的执行需要给定执行权限(chmod +x filename.sh)。 2. 开始行(Shebang):开头的两个字符#!(Shebang)指定执行本脚本文件所使用的Shell解释器。一般来说,使用Bash解释器,开始行应该这样写:#!/bin/bash 3. 变量:在Shell脚本中,用$符号表示,变量名和等号之间不能有空格。例如:var=123 4. 数组:在Shell脚本中,用小括号()表示,使用花括号{}和下标来引用数组中的元素。例如:arr=(1 2 3) echo ${arr[1]} 5. 流程控制语句:if、while、case、for等,用于实现分支和循环等控制流程。 6. 命令行参数:在执行脚本时从命令行传入,用$符号表示。例如:在命令行执行:./test.sh arg1 arg2,则脚本中可以用$1表示arg1,$2表示arg2。 7. 读取键盘输入:使用read命令,例如:read name,表示从键盘读取一行文本并存储到变量name中。 8. 函数:用于将一些重复的命令封装起来,实现代码复用。例如: function test(){ echo "hello world"}。 Shell脚本是Unix/Linux操作系统的基础,掌握Shell脚本的基础知识是很重要的。在实践中不断熟练掌握Shell脚本,可以提高个人的工作效率和工作质量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值