shell编程入门 shell变量总结

shell编程

一、shell简介

Shell语言:是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁

shell编程:通常指的是学习shell命令语法后,利用这套语法开发脚本程序,操作、访问内核服务。而不是使用C语言去编写一个shell程序。

shell解释器: unix默认sh,Linux的默认是Bash:全称是bash shell,bash兼容sh,针对sh编写的Shell代码可以不加修改地在bash中运行。

二、shell变量

shell中有3种变量: 用户变量、环境变量、特殊变量
    用户变量在编程过程中使用量最多
    环境变量主要是在程序运行时需要设置
    特殊变量在对参数判断和命令返回值判断时会使用


变量的定义语法: 变量名=变量值

变量的定义需遵循的规则
1)变量名可以由字母、数字和下划线组成,但是不能以数字开头,不能使用关键字
2)在 Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须使用特殊命令
3)变量用等号"="连接值,"="左右两侧不能有空格。
4)变量值中如果有空格,则需要使用单引号或双引号包含,如 test="hello world!"
5)在变量值中,可以使用转义符"\"。

1、用户变量

定义普通变量: 变量名=变量值
定义只读变量: readonly 变量名=变量值
注意: 
	1- 等号左右两边不能有空格
	2- 普通变量和只读变量只在当前会话(session)/生命周期中有效。如果退出了,那么就没有了
	3- 只读变量不能修改值

获取变量值: echo ${变量名}   或者  echo $变量名

删除普通变量: unset 普通变量名

修改普通变量值: 变量名=变量值

修改普通变量为只读变量: readonly 普通变量名
[root@cent1 test]# name = "张三"
bash: name: command not found...
[root@cent1 test]# name="张三"  
[root@cent1 test]# echo name
name
[root@cent1 test]# echo $name
张三
[root@cent1 test]# echo $name
张三
[root@cent1 test]# echo $name666

[root@cent1 test]# echo ${name}666
张三666
[root@cent1 test]# unset name
[root@cent1 test]# echo ${name}666
666
[root@cent1 test]# echo ${name}

[root@cent1 test]# readonly age=18
[root@cent1 test]# echo $age
18
[root@cent1 test]# unset age
-bash: unset: age: cannot unset: readonly variable

[root@cent1 ~]# exit
logout

Last login: Sat Mar 18 09:03:37 2023 from 192.168.88.1
[root@cent1 ~]# echo $age

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

2、环境变量

环境变量: 是操作系统在运行的时候,记录的一些和系统相关的变量,用来辅助程序/shell脚本的运行
注意: 推荐环境变量的名称全部使用大写

查看系统记录的环境变量: env

常见的环境变量: HOSTNAME SHELL USER PATH ...

自定义环境变量格式: export 变量名=变量值

	临时设置: 直接在命令行中写export 变量名=变量值
	注意: 临时环境变量只在当前会话(session)/生命周期中有效。如果退出了,那么就没有了
	
	永久设置: 
		1- /etc/profile文件中设置: 所有用户有效
		2- ~/.bashrc文件中设置: 所属用户有效
	注意: 让永久设置生效的两种方式
		1- source 前面两个中对应的文件路径。推荐
			例如: source /etc/profile
		2- 重新连接当前会话(session)
[root@cent1 test22]# env
HOSTNAME=cent1
SHELL=/bin/bash
USER=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@cent1 test22]# echo $SHELL
/bin/bash
[root@cent1 test22]# echo $USER
root
[root@cent1 test22]# echo $HOSTNAME
cent1
[root@cent1 test22]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@cent1 test22]# env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@cent1 ~]# export ITHEIMA=666
[root@cent1 ~]# echo $ITHEIMA

[root@cent1 ~]# vim /etc/profile
...
# 文件最后一行添加并保存
export BIGDATA=666888
[root@cent1 ~]# source /etc/profile
[root@cent1 ~]# exit
logout
login
[root@cent1 ~]# echo $BIGDATA
666888

在这里插入图片描述在这里插入图片描述

3、特殊变量

我们可以在执行 Shell 脚本时,向脚本传递参数,这时候可以使用特殊变量来获取参数
在执行Shell程序脚本时,可以向shell脚本动态传递参数。好处是某些配置属性不用写死在脚本中。
动态传递参数的方式: sh shell脚本文件 参数1  参数2 ...
Shell常用的特殊变量在shell脚本内部支持接收参数并使用:
    $0: 得到shell脚本名称
    $n: n是具体的数字,从1开始往后递增。获取对应位置的参数
    $#: 传递给shell脚本的参数个数
    $*: 将所有传递进来的参数使用字符串进行保存
echo $0 $1 $2 $# $*

在这里插入图片描述

4、三种变量对比总结

类型频率用途
用户变量最多临时定义变量。自己用的时候临时进行定义,可以在命令行也可以在shell脚本
环境变量比较少一般和linux软件安装配置有关。为了能够快速的执行某些脚本
特殊变量比较少主要是用来接收参数信息和内容

三、字符串数据类型

定义字符串: 变量名=变量值     变量名='变量值'   变量名="变量值"
建议: 推荐使用双引号,因为能够对特殊内容(例如linux命令)或者用户变量能够特殊的处理。而单引号里面全部当成普通字符串进行处理
示例: 
	1- echo "当前我在的目录是`pwd`"
	2- echo "我记住的单词是${word_1}abc"
[root@cent1 ~]# name=斌子
[root@cent1 ~]# age='18'
[root@cent1 ~]# gender="男人"
[root@cent1 ~]# echo $name $age $gender
斌子 28 男人
[root@cent1 ~]# echo '我的名字是${name} 年龄是${age} 性别是${gender}'
我的名字是${name} 年龄是${age} 性别是${gender}
[root@cent1 ~]# echo "我的名字是${name} 年龄是${age} 性别是${gender}" 
我的名字是斌子 年龄是28 性别是男人
[root@cent1 ~]# echo "${name} ${age} ${gender}"
斌子 28 男人


[root@cent1 ~]# date
Sat Mar 18 11:51:16 CST 2023
[root@cent1 ~]# echo date
date
[root@cent1 ~]# echo `date`
Sat Mar 18 11:51:29 CST 2023

[root@cent1 ~]# now1=date
[root@cent1 ~]# echo $now1
date
[root@cent1 ~]# now2=`date`
[root@cent1 ~]# echo $now2
Sat Mar 18 11:52:17 CST 2023

[root@cent1 ~]# echo '现在的日期是${now2}'
现在的日期是${now2}
[root@cent1 ~]# echo '现在的日期是date'   
现在的日期是date
[root@cent1 ~]# echo '现在的日期是`date`' 
现在的日期是`date`

[root@cent1 ~]# echo "现在的日期是${now2}"
现在的日期是Sat Mar 18 11:52:17 CST 2023
[root@cent1 ~]# echo "现在的日期是`date`" 
现在的日期是Sat Mar 18 11:56:58 CST 2023

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、shell命令和shell脚本

shell命令、shell脚本:本质上都是属于shell编程;
shell命令:倾向于在linux命令行中使用,适合逻辑简单场景;
shell脚本:倾向于在脚本文件中编写,适合复杂逻辑处理。
	注意: 1.shell脚本文件一般以.sh结尾    2.文件第一行一般为#!/bin/bash

shell脚本的执行方式:
    方式一:sh 脚本路径
        注意: 脚本路径可以是相对,也可以是绝对路径
        这种执行方式,脚本文件不需要具有可执行权限。

    方式二:相对路径执行		
        格式: ./脚本路径
        注意: 这种执行方式,必须保证脚本文件具有可执行权限。

    方式三:绝对路径执行           
        格式: /脚本的绝对路径
        注意: 这种执行方式,必须保证脚本文件具有可执行权限。

shell脚本也可以动态传参: sh 脚本 参数1  参数2 ...      注意: 脚本内部可以使用特殊变量获取

在这里插入图片描述

在这里插入图片描述

1、案例1:脚本中变量操作

创建一个my_shell_1.sh脚本文件,要求此脚本内先定义一个字符串变量str并赋值linux666,然后打印该字符串
最后保存并执行此脚本

注意:
①shell脚本后缀名没有要求,通常以.sh结尾

在shell中除了第一行的#表示特殊格式外,其他地方的#符号一般表示注释。
②#! 是一个约定的标记,它告诉系统
这个脚本需要什么解释器来执行
③相对路径方式如果不加./直接执行脚本
默认去系统环境变量中查找

my_shell_1.sh脚本内容如下:

#!/bin/bash

str=linux666

echo ${str}

2、案例2:脚本中获取参数

1.编写一个脚本文件my_shell_2.sh,在里面使用之前学习的特殊变量分别获取当前脚本文件名称,传入参数个数并分别获取对应参数内容

2.执行my_shell_2.sh脚本文件,传入3个参数分别为:张三 18 男

3.使用sh命令方式执行my_shell_2.sh脚本文件

my_shell_2.sh脚本内容:
#!/bin/bash

echo "脚本名称$0"
echo "第一个参数内容$1"
echo "第二个参数内容$2"
echo "第三个参数内容$3"
echo "参数个数$#"
echo "所有参数内容$*"


执行结果:
[root@node1 flink]# sh my_shell_2.sh zhangsan 18 nan
脚本名称my_shell_2.sh
第一个参数内容zhangsan
第二个参数内容18
第三个参数内容nan
参数个数3
所有参数内容zhangsan 18 nan
[root@node1 flink]# sh my_shell_2.sh "zhangsan 666" 18 nan
脚本名称my_shell_2.sh
第一个参数内容zhangsan 666
第二个参数内容18
第三个参数内容nan
参数个数3
所有参数内容zhangsan 666 18 nan
[root@node1 flink]# 

执行结果:
[root@node1 flink]# sh my_shell_2.sh zhangsan 18 nan
脚本名称my_shell_2.sh
第一个参数内容zhangsan
第二个参数内容18
第三个参数内容nan
参数个数3
所有参数内容zhangsan 18 nan
[root@node1 flink]# sh my_shell_2.sh “zhangsan 666” 18 nan
脚本名称my_shell_2.sh
第一个参数内容zhangsan 666
第二个参数内容18
第三个参数内容nan
参数个数3
所有参数内容zhangsan 666 18 nan
[root@node1 flink]#










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖人_li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值