Shell脚本基础应用

news/2024/11/8 6:46:40/

记录:427

场景:Shell脚本基础应用。脚本格式、执行方式、定义和使用变量、双引号和单引号、反引号和$()、读取用户输入和文件、输出与输入重定向、export命令、alias命令、exit命令、查看内建命令。

版本:CentOS Linux release 7.9.2009。

Shell是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用Linux内核。

Shell本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序。

1.CentOS的命令行控制台

使用Xmanager Enterprise的Xshell登录CentOS的命令行控制台。

1.1root用户命令行提示

[root@hadoop211 ~]# 

解析:[],是标准格式。root表示当前是超级用户root。@hadoop211表示用户在hadoop211主机。~,表示当前用户root的根目录。#,表示超级用户命令提示符,操作命令在此后输入。

执行pwd命令:

[root@hadoop211 ~]# pwd
/root

1.2普通用户命令行提示

[learn@hadoop211 ~]$ 

解析:[],是标准格式。learn表示当前是普通用户learn。@hadoop211表示用户在hadoop211主机。~,表示当前用户learn的根目录。$,表示普通用户命令提示符,操作命令在此后输入。

执行pwd命令:

[learn@hadoop211 ~]$ pwd
/home/learn

2.Shell脚本格式

一般情况下,Shell脚本都是一个可执行文件。

2.1编辑脚本

脚本名称:b2023051601.sh

编辑命令:vi b2023051601.sh

脚本内容:

#!/bin/bash
echo "Hello Shell."
echo "Shell is a scripting language."

解析:#!表示指定脚本解释器,指定/bin/bash来执行b2023051601.sh脚本。

2.2脚本赋可执行权限

命令:chmod +x b2023051601.sh

2.3执行脚本

命令:./b2023051601.sh

输出:

Hello Shell.
Shell is a scripting language.

3.Shell脚本执行方式

3.1脚本作为独立程序运行

3.1.1使用./方式执行

(1)脚本

脚本名称:b2023051601.sh

脚本内容:

#!/bin/bash
echo "Hello Shell."
echo "Shell is a scripting language."

(2)执行

命令:./b2023051601.sh

(3)解析

在脚本中必须指定#!/bin/bash。脚本需赋可执行权限:chmod +x b2023051601.sh。

3.1.2使用bash执行

(1)脚本

脚本名称:b2023051602.sh

脚本内容:

echo "Hello Shell."
echo "Shell is a scripting language."

(2)执行

命令1:bash b2023051602.sh

命令2:/bin/bash b2023051602.sh

(3)解析

在脚本中不需要指定#!/bin/bash。脚本不需要赋可执行权限。

3.2当前进程中运行脚本

(1)脚本

脚本名称:b2023051603.sh

脚本内容:

echo "Hello Shell."
echo "Shell is a scripting language."

(2)执行

命令1:source b2023051603.sh

命令2:. b2023051603.sh

(3)解析

在脚本中不需要指定#!/bin/bash。脚本不需要赋可执行权限。

4.定义变量和使用变量

4.1脚本

脚本名称:b2023051604.sh

脚本内容:

#!/bin/bash
echo "定义变量,city01,city02,city03"
city01=Hangzhou
city02='Suzhou'
city03="Shanghai"
echo "使用变量"
echo $city01
echo ${city02}
echo "长三角城市包括: ${city01},${city02},${city03}"

4.2执行与输出

执行:bash b2023051604.sh

输出:

定义变量,city01,city02,city03
使用变量
Hangzhou
Suzhou
长三角城市包括: Hangzhou,Suzhou,Shanghai

4.3注意

在赋值时,在等于号=的左右两边不能有空格。

4.4设置只读变量和删除变量

脚本:

#!/bin/bash
echo "定义变量,city01,city02,city03"
city01=Hangzhou
city02='Suzhou'
city03="Shanghai"
echo "设置为只读变量"
readonly city03
city03="Ningbo"
echo "city03=${city03}"
echo "删除变量"
unset city02
echo "city02=${city02}"

执行:

定义变量,city01,city02,city03
设置为只读变量
b20230516041.sh: line 8: city03: readonly variable
city03=Shanghai
删除变量
city02=

解析:city03设置为readonly只读变量后已经无法修改。city02删除后输出已经没值。

5.双引号和单引号

使用单引号' '包围变量的值时,单引号里面内容原样输出。内容中有变量和命令也会把它原样输出。也就是使用单引号不会解析变量和命令。

使用双引号" "包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。

单引号使用场景:显示纯字符串的情况,不希望解析变量、命令等的场景。

双引号使用场景:适合字符串中附带有变量和命令并且需要将其解析后再输出的场景。

5.1脚本

脚本名称:b2023051605.sh

脚本内容:

#!/bin/bash
echo "定义变量,city01,city02,city03"
city01=Hangzhou
city02='Suzhou'
city03="Shanghai"
echo "单引号输出"
echo '长三角城市包括: ${city01},${city02},${city03}'
echo "双引号输出"
echo "长三角城市包括: ${city01},${city02},${city03}"

5.2执行与输出

执行:bash b2023051605.sh

输出:

定义变量,city01,city02,city03
单引号输出
长三角城市包括: ${city01},${city02},${city03}
双引号输出
长三角城市包括: Hangzhou,Suzhou,Shanghai

6.反引号和$()

反引号``和$()可以把命令结果赋值给变量。

6.1脚本

脚本名称:b2023051606.sh

脚本内容:

#!/bin/bash
echo '使用反引号``把命令结果赋值给变量'
cityInfo01=`cat cityInfo.txt`
echo ${cityInfo01}
echo '使用$()把命令结果赋值给变量'
cityInfo02=$(cat cityInfo.txt)
echo ${cityInfo02}

6.2执行与输出

执行:bash b2023051606.sh

输出:

使用反引号``把命令结果赋值给变量
长三角城市包括上海、杭州、苏州等。
使用$()把命令结果赋值给变量
长三角城市包括上海、杭州、苏州等。

6.3文件内容

文件名称:cityInfo.txt

文件内容:

长三角城市包括上海、杭州、苏州等。

7.读取用户输入

7.1脚本

脚本名称:b2023051607.sh

脚本内容:

#!/bin/bash
echo "请输入城市名称:"
read cityname
echo "城市名称: ${cityname}"

7.2执行与输出

执行:bash b2023051607.sh

输出:

请输入城市名称:
Hangzhou
城市名称: Hangzhou

8.读取文件

8.1脚本

脚本名称:b2023051608.sh

脚本内容:

#!/bin/bash
echo '1.使用cat读取文件并逐行打印'
filePath=`pwd`
for line in `cat ${filePath}/province.txt`
do echo "${line}"
done
echo "  "
echo '2.使用read读取文件并逐行打印'
cat ${filePath}/province.txt | while read line
doecho "${line}"
done

8.2执行与输出

执行:bash b2023051608.sh

输出:

1.使用cat读取文件并逐行打印
长三角省份有浙江、江苏等。
长三角最大都市是上海。
长三角经济发达。2.使用read读取文件并逐行打印
长三角省份有浙江、江苏等。
长三角最大都市是上海。
长三角经济发达。

9.输出重定向

9.1脚本

脚本名称:b2023051609.sh

脚本内容:

#!/bin/bash
rm -rf city01.txt city02.txt
echo '>表示以覆盖的方式输出到文件'
for city in "杭州" "苏州" "上海"
do echo ${city}>city01.txt
done
echo "  "
echo '>>表示以追加的方式输出到文件'
for city in "杭州" "苏州" "上海"
do echo ${city}>>city02.txt
done

9.2执行与输出

执行:bash b2023051609.sh

city01.txt和city02.txt内容:

[root@hadoop211 tutorial]# cat city01.txt 
上海
[root@hadoop211 tutorial]# cat city02.txt 
杭州
苏州
上海

10.输入重定向

command <file:使用<将文件内容重定向到命令输入端。

command <<EOF:从标准输入(键盘)中读取数据,直到遇见停止符EOF才停止输入。停止符EOF是任意的字符串,用户自己定义的符号。

command <file1 >file2:文件file1作为command的输入源,把command的处理结果输出到文件file2。

10.1脚本

脚本名称:b20230516010.sh

脚本内容:

#!/bin/bash
filePath=`pwd`
echo '1.使用<输入重定向到wc命令'
wc -l <${filePath}/province.txt
echo " "
echo '2.使用<输入重定向到read命令'
while read line
doecho ${line}
done <${filePath}/province.txt

10.2执行与输出

执行:bash b20230516010.sh

输出:

1.使用<输入重定向到wc命令
32.使用<输入重定向到read命令
长三角省份有浙江、江苏等。
长三角最大都市是上海。
长三角经济发达。

11.export命令

export命令用于设置或显示环境变量。

Shell执行程序时,Shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅限于该次登陆操作。

11.1脚本

脚本名称:b2023051611.sh

脚本内容:

#!/bin/bash
echo "1.默认系统的Path变量"
echo $PATH
export WORK_HOME=/home/tutorial
echo "2.新增系统的Path变量后"
export PATH=$PATH:$WORK_HOME/bin
echo $PATH

11.2执行与输出

执行:bash b2023051611.sh

输出:

1.默认系统的Path变量
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/apps/module/jdk1.8.0_281/bin:/root/bin
2.新增系统的Path变量后
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/apps/module/jdk1.8.0_281/bin:/root/bin:/home/tutorial/bin

12.alias命令

alias不能写到自定义脚本中,如需重启生效可以写在/root/.bashrc文件中。

12.1使用alias

自定义命令别名:alias llh='ll -h'

12.2执行与输出

执行:llh

输出:

[root@hadoop211 ~]# alias llh='ll -h'
[root@hadoop211 ~]# llh
total 4.0K
-rw-------. 1 root root 1.4K Oct 21  2022 anaconda-ks.cfg

13.exit命令

使用exit退出程序,使用$?查看程序状态。

13.1脚本

脚本名称:b2023051613.sh

脚本内容:

#!/bin/bash
echo '设置exit命令状态码'
exit 16

13.2执行与输出

执行:bash b2023051613.sh

输出:

[root@hadoop211 tutorial]# bash b2023051613.sh 
设置exit命令状态码
[root@hadoop211 tutorial]# echo $?
16

14.查看内建命令

14.1执行与输出

使用type查看一个命令使内建命令还是非内建命令。

[root@hadoop211 ~]# type cd
cd is a shell builtin
[root@hadoop211 ~]# type ll
ll is aliased to `ls -l --color=auto'
[root@hadoop211 ~]# type yum
yum is /usr/bin/yum

以上,感谢。

2023年5月16日


http://www.ppmy.cn/news/74380.html

相关文章

数字逻辑(计科专业)

数制、码制、逻辑运算 基本逻辑符号 半加器 用与非门实现 全加器 编码器 编码就是将信息装换成独特的代码或信号输出的电路 普通编码器&#xff1a;任何时候只允许输入一个有效编码信号&#xff0c;否则输出就会发生混乱。 优先编码器&#xff1a;允许同时输入两个以上的有效…

2023逆向分析代码渗透测试flag0072解析(超详细)

一、竞赛时间 180分钟 共计3小时 1.从靶机服务器的FTP上下载flag0072,分析该文件,请提交代码保护技术的类型。提交格式:XXXX。 2.提交被保护的代码所在地址。提交格式: 0xXXXX。 3.提交代码解密的密钥。提交格式: 0xXX。 4.请提交输入正确flag时的输出。提交格式: XXXX。…

TCL文件访问

目录 文件名 基本文件输入输出命令 随机文件访问 当前工作目录 文件操作和获取文件信息 文件名 TCL 提供了丰富的文件操作的命令。通过这些命令你可以对文件名进行操作(查找匹配某一模式 的文件)、以顺序或随机方式读写文件、检索系统保留的文件信息&#xff08;如最后访…

TensorFlow 1.x学习(系列二 :4):自实现线性回归

目录 线性回归基本介绍常用的op自实现线性回归预测tensorflow 变量作用域 线性回归基本介绍 线性回归&#xff1a; w 1 ∗ x 1 w 2 ∗ x 2 w 3 ∗ x 3 . . . w n ∗ x n b i a s w_1 * x_1 w_2 * x_2 w_3 * x_3 ... w_n * x_n bias w1​∗x1​w2​∗x2​w3​∗x3​..…

倒挂的解决方案你现在是一位计算机专家,来聊一聊:“美国的火星探测器Mars Path-finder 就是因为优先级倒挂而出现故障的故事”

目录 倒挂的解决方案 你现在是一位计算机专家&#xff0c;来聊一聊&#xff1a;“美国的火星探测器Mars Path-finder 就是因为优先级倒挂而出现故障的故事” ●使用中断禁止 具体证明请参阅Liu和Kayland于1973年发表的论文。 ● 因时序或外部中断或进程挂起而导致操作系统获…

加密与解密 调试篇 动态调试技术

目录 OllyDbg调试器的使用 CPU窗口 反汇编窗口 信息面板 数据面板 寄存器面板 栈面板 OllyDbg的配置 界面设置 调试设置 加载符号文件 基本操作 调试 单步跟踪 如果我们想直接运行 如果想重新运行 设置断点 下面对这个程序进行完整的调试分析 方法1 猜函数 方法…

第七章 面向对象编程(基础)

一、类与对象 1. 类和对象的区别和联系 &#xff08;1&#xff09;类是抽象的&#xff0c;概念的&#xff0c;代表一类事物&#xff0c;比如人类、猫类... 即它是数据类型。 &#xff08;2&#xff09;对象是具体的&#xff0c;实际的&#xff0c;代表一个具体事物&#xff0c…

Linux systemd

这里写目录标题 一:配置文件内容二:配置文件位置三:开机启动配置四:systemctl使用 一:配置文件内容 systemd服务配置文件存放在/usr/lib/systemd目录下&#xff0c;有系统system和用户user之分&#xff0c;需要开机不登录就能运行的程序&#xff0c;放在/usr/lib/systemd/syst…