Shell脚本基础应用

记录: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
do
  echo "${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
do
  echo ${line}
done <${filePath}/province.txt

10.2执行与输出

执行:bash b20230516010.sh

输出:

1.使用<输入重定向到wc命令
3
 
2.使用<输入重定向到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日

猜你喜欢

转载自blog.csdn.net/zhangbeizhen18/article/details/130714095