首页 置换 选车 估价 问答 生活 经销商 车管所 汽车资讯 汽车销量 车牌查询 今日油价 天气预报
您的位置: 首页 > 生活 > 科技 > shell编程课程日志(Shell编程一)
shell编程课程日志(Shell编程一)
更新时间:2024-07-06 22:34:32
认识Shell1.1 概述

我们知道计算机是无法直接识别我们键入的指令的,在计算机语言里只有二进制的0和1,所有信息都将转化为由0和1组成的代码进行存储和传输。那么我们和计算机之间进行交互就需要有一个翻译官来翻译我们键入的指令以便计算机能够识别,在Linux系统中这个翻译官正是由Shell来担任的。简单来说,Shell就是用户与Linux内核之间的解释器,负责将用户的指令翻译为内核可以识别的指令。

1.2 常见Shell解释器

常见的Shell解释器有:

/bin/bash

/bin/sh

/bin/csh

/bin/tcsh

等等。

1.3 查看Shell解释器

如何查看本机所支持的Shell解释器有哪些呢?

可以使用命令:

cat /etc/shells

shell编程课程日志(Shell编程一)1

1.4 修改Shell解释器

Linux系统中新创建的用户默认的登录Shell为/bin/bash,可以使用usermod或chsh命令修改用户的登录shell:

shell编程课程日志(Shell编程一)2

本系列文章使用的操作系统为CentOS7.5,Shell解释器为/bin/bash。

Shell脚本基础2.1 什么是Shell脚本?

简单地说就是将Linux或类UNIX系统的命令写入一个文件中,这个文件就是一个Shell脚本文件。

2.2 Shell脚本的书写格式

一个合格规范的脚本应该包含以下这些内容:

  1. #!脚本声明:标明使用哪种解释器来解释该脚本的代码
  2. 注释信息:标明该脚本编写的步骤、思路、用途等等其他信息,方便阅读
  3. 脚本正式可执行指令语句:具体的Shell代码语句块
2.3 编写第一个Shell脚本

#!/bin/bash # 第一个Shell脚本,输入Hello World echo "Hello World"

2.4 Shell脚本的注释

注释的内容计算机将自动忽略,这部分内容是给阅读者看的。

单行注释:# 第一行的#!为标识所使用的解释器

单行或多行注释:<<字符

字符

shell编程课程日志(Shell编程一)3

脚本文件的执行方式3.1 脚本文件没有可执行权限时

新创建的脚本文件,默认是没有可执行权限的,不可以直接执行,此时可以使用bash、sh、source、. 来执行脚本文件。

[root@localhost shell]# chmod -x first.sh [root@localhost shell]# ls -l first.sh -rw-r--r-- 1 root root 122 Aug 30 11:55 first.sh [root@localhost shell]# bash first.sh Hello World [root@localhost shell]# sh first.sh Hello World [root@localhost shell]# source first.sh Hello World [root@localhost shell]# . first.sh Hello World

上述各命令执行脚本的区别:

bash/sh:执行脚本时将会开启一个shhd子进程进行执行脚本命令

source/.:执行脚本时是直接在bash终端下执行的,没有开启子进程。

3.2 脚本文件有可执行权限时

脚本文件分配了可执行权限后,可以直接使用绝对路径或相对路径来执行脚本文件。

[root@localhost shell]# ./first.sh Hello World [root@localhost shell]# /opt/shell/first.sh Hello World

数据的输入与输出4.1 数据输出4.1.1 echo 命令

功能描述:echo命令主要用来输出显示字符串信息。

语法格式:echo [选项] 字符串

常用选项:

  1. -n:不换行输出
  2. -e:扩展输出,可以让echo命令识别\后面的转义符号含义。

[root@localhost shell]# echo "Hello World" #echo默认换行输出 Hello World [root@localhost shell]# echo -n "Hello World" #添加-n选项不换行 Hello World[root@localhost shell]# echo -e "\033[031mHello World\033[0m" # 使用-e选项输出带颜色的字符串 Hello World # 在第3行,第10列输出红色字体的Hello World [root@localhost shell]# echo -e "\033[31m\033[3;10H Hello World\033[0m" Hello World

shell编程课程日志(Shell编程一)4

4.1.2 printf 命令

功能描述:格式化输出数据,printf默认不换行输出

语法格式:printf [格式] 参数(一般参数就是要输出的内容)

常用的格式字符串及功能描述如下表:

格式字符

功能描述

%d或%i

十进制整数

%o

八进制整数

%x

十六进制整数

%u

无符号十进制整数

%f

浮点数(小数点数)

%s

字符串

\b

退格键

\f

换行且光标仍停留在原位置

\n

换行且光标移至行首

\r

光标移至行首,但不换行

\t

Tab键

[root@localhost shell]# printf "%d" 23 #不换行输出数字 23[root@localhost shell]# printf "%d\n" 23 # 换行输出数字 23 [root@localhost shell]# printf "|]|\n" 23 #换行输出数字并且宽度为5右对齐 | 23| [root@localhost shell]# printf "|%-5d|\n" 23 #换行输出数字并且宽度为5左对齐 |23 | [root@localhost shell]# printf "|%-5s|\n" aaa #左对齐输出字符串 |aaa | [root@localhost shell]# printf "|%5s|\n" aaa #右对齐输出字符串 | aaa| [root@localhost shell]# printf "%3.2f\n" 626.327237 #输出浮点数,保留两位小数 626.33 [root@localhost shell]# printf "%.3f\n" 626.327237 #输出浮点数,保留三位小数 626.327

4.2 输入数据4.2.1 read 命令

功能描述:可以从标准输入中读取一行数据

语法格式:read [选项] [变量名]

默认变量名为REPLY。

常用选项:

  1. -p:显示提示信息
  2. -t:设置读入数据的超时时间
  3. -n:设置读取n个字符后结束,默认会读取标准输入的一整行内容
  4. -r:支持读取\,默认read命令理解\为特殊符号(转义字符)
  5. -s:静默模式,不显示标准输入的内容

[root@localhost shell]# read key1 aaa [root@localhost shell]# echo $key1 aaa [root@localhost shell]# read key1 key2 key3 11 22 33 [root@localhost shell]# echo $key1 11 [root@localhost shell]# echo $key2 22 [root@localhost shell]# echo $key3 33 [root@localhost shell]# read -p "请输入账号:" uname 请输入账号:test [root@localhost shell]# echo $uname test [root@localhost shell]# read -s -p "请输入密码:" passwd 请输入密码:[root@localhost shell]# echo $passwd 123456

5. 输入与输出重定向

在Linux系统中输出可以分为标准输出和标准错误输出。标准输出的文件描述符为1,标准错误输出的描述符为2。而标准输入的文件描述符为0。

如果希望改变输出信息的方向,可以使用>或>>符号将输出信息重定向到文件中。

重定向符号与功能描述表

符号

功能描述

1>

标准输出覆盖重定向

1>>

标准输出追加重定向

2>

标准错误输出覆盖重定向

2>>

标准错误输出追加重定向

&>

标准输出和标准错误输出覆盖重定向

&>>

标准输出和标准错误输出追加重定向

<

输入重定向,后面需要跟一个文件名

<<

可以将数据内容重定向传递给前面的一个命令,作为命令的输入

5.1 输出重定向

[root@localhost shell]# echo "Hello the world" > test.txt [root@localhost shell]# cat test.txt Hello the world [root@localhost shell]# echo "My Shell Scripts" > test.txt [root@localhost shell]# cat test.txt My Shell Scripts [root@localhost shell]# echo "test file" >> test.txt [root@localhost shell]# cat test.txt My Shell Scripts test file [root@localhost shell]# ls /etc/hosts /abc > test.txt ls: cannot access /abc: No such file or directory [root@localhost shell]# cat test.txt /etc/hosts [root@localhost shell]# ls /etc/hosts /abc 2> test.txt /etc/hosts [root@localhost shell]# cat test.txt ls: cannot access /abc: No such file or directory [root@localhost shell]# ls /etc/hosts /abc &> test.txt [root@localhost shell]# cat test.txt ls: cannot access /abc: No such file or directory /etc/hosts [root@localhost shell]# ls /etc/hosts /abc > ok.txt 2> error.txt [root@localhost shell]# cat ok.txt /etc/hosts [root@localhost shell]# cat error.txt ls: cannot access /abc: No such file or directory

另外,可以使用2>&1将错误输出重定向到标准输出,也可以使用1>&2将标准输出重定向到错误输出。

[root@localhost shell]# ls /abc > ok.txt 2>&1 [root@localhost shell]# cat ok cat: ok: No such file or directory [root@localhost shell]# echo "hello" 2> error.txt 1>&2 [root@localhost shell]# cat error.txt Hello

Linux系统中有一个特殊的设备文件/dev/null,这是一个黑洞。无论往该文件中写入多少数据,都会被系统吞噬、丢弃。

[root@localhost shell]# echo "hello" > /dev/null [root@localhost shell]# ls /abc 2> /dev/null [root@localhost shell]# ls /etc/hosts /abc &> /dev/null

5.2 输入重定向5.2.1 < file 输入重定向

例:将/etc/hosts文件中的内容输入重定向到邮件内容中,发送给root用户

[root@localhost shell]# mail -s warning root@localhost < /etc/hosts [root@localhost shell]# mail Heirloom Mail version 12.5 7/5/10. Type ? for help. "/var/spool/mail/root": 1 message 1 new >N 1 root Mon Aug 30 15:47 19/769 "warning" & 1 Message 1: From root@localhost.localdomain Mon Aug 30 15:47:16 2021 Return-Path: <root@localhost.localdomain> X-Original-To: root@localhost Delivered-To: root@localhost.localdomain Date: Mon, 30 Aug 2021 15:47:16 0800 To: root@localhost.localdomain Subject: warning User-Agent: Heirloom mailx 12.5 7/5/10 Content-Type: text/plain; charset=us-ascii From: root@localhost.localdomain (root) Status: R 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 & exit

5.2.2 <<输入重定向

<<符号(也称为Here Document)代表你需要的内容在这里。

[root@localhost shell]# vim second.sh #!/bin/bash # cat 通过Here Document读取数据,再通过输出重定向将数据导入文件 cat > /opt/shell/test.txt << HERE 该文件为测试文件。 <<输入重定向测试。 HERE [root@localhost shell]# chmod x second.sh [root@localhost shell]# ./second.sh [root@localhost shell]# cat test.txt 该文件为测试文件。 <<输入重定向测试。

,
相关推荐RECOMMEND
一元购手机骗局(1元秒杀手机近4万人中招)
“双十一”购物节已经开始了,各种满减规则、优惠券让人眼花缭乱。10月28日,江苏省消保委发布消费提示,“剁手”虽快乐,也要多留心。1元秒到手机却收到貔貅手串谨慎直播抢购及时留存证据直播带货作为一种新的...
淘宝店上显示hot是什么意思(手机淘宝上出现的HOT是什么意思)
好神奇呀,电商老师讲到直通车的时候,问淘宝出现HOT是什么意思。我们回答的是爆款,热销的意思。事实上跟爆款完全不沾边,它是这个意思:淘宝商家花钱才会有淘宝HOT标识,按买家浏览淘宝页面时点击量收费。去...
dnf刃影除了刷图还应该做什么(DNF刃影刷错图了不要PL的黑科技副本)
每逢DNF的超级大版本更新,老玩家已经习惯了bug层不出穷的情况,不过夏日版本策划手脚太麻利了,奥兹玛的锁血才出2天就被紧急修复,不仅如此,似乎连“百变希洛克”的跨界都没了,不少平民直呼“我还没攒够3...
抖音号如何解绑手机号(抖音如何更换手机号)
抖音号如何解绑手机号?抖音手机号更换方法:点“我”,点右上角“三道杠”,点“设置”,点“帐户与安全”,点“手机绑定”,点“更换”,接下来我们就来聊聊关于抖音号如何解绑手机号?以下内容大家不妨参考一二希...
美图手机为什么停产了呢(小而美的手机生意还能继续么)
随着美图手机的官宣退市,女性手机“纯血统、小体量”的时代已经落幕。但颜值即正义,虚荣即生意。对于各大厂商来说,女性手机市场依然有着无限可能。而在一轮轮的大浪淘沙后,最终是将这种可能变现真需求,还是遗憾...
交换友链要注意什么(网站友情链接交换陷阱)
现如今外链的效果越来越低,但是友情链接的交换并没有受什么影响,效果仍然很突出。比如现如今的网站收录难问题,就可以利用高权重、同行业网站来带动,加快网站的收录,提升网站收录的几率。不过在网站友情链接交换...