【Shell基础】变量定义与使用详解

1. Shell基本介绍

​ Shell是用户与操作系统内核之间的接口,它既是一种命令解释器,又是一种编程语言。它能够批量操作,进行系统自动化管理。

一个典型的Shell脚本包括:

  1. Shebang:指定解释器,例如 #!/bin/bash
  2. 注释:以#开头,用于说明
  3. 命令:要执行的命令
  4. 控制结构:条件判断、循环等

2. 变量

  1. 变量的定义
  • 定义变量:变量名=值(注意等号两边不能有空格)
  • 使用变量:$变量名${变量名}
[root@localhost ~]# num=10
[root@localhost ~]# echo $num
10
[root@localhost shell]# echo ${num}
10
[root@localhost shell]# echo "$num"
10
[root@localhost shell]# echo "${num}"
10
# Shell脚本的执行

[root@localhost shell]# vi 1.sh
[root@localhost shell]# cat 1.sh
#!/bin/bash
num=20
echo $num


#方法一:指定路径的命令,要求文件必须有 x 权限。

[root@localhost shell]# chmod +x 1.sh     #给用户增加执行权限
[root@localhost shell]# /opt/shell/1.sh   #指定绝对路径:/opt/shell/1.sh 
20																									
[root@localhost shell]# ./1.sh   		  #指定相对路径:./1.sh
20

#方法二:指定Shell来解释脚本,不要求文件必须有 x 权限。

[root@localhost shell]# sh 1.sh          #sh 脚本路径:sh 1.sh 
20
[root@localhost shell]# source 1.sh      #source 脚本路径:. 1.sh
20
  1. 变量的分类
  • 自定义变量:由用户自己定义、修改和使用

  • 环境变量:由系统维护,用于设置工作环境

  • 位置变量:通过命令行给脚本程序传递参数

    例如:$0 $1 $2

  [root@localhost shell]# vi 2.sh
  [root@localhost shell]# cat 2.sh
  #!/bin/bash
  
  echo "$0 , $1 , $2"
  [root@localhost shell]# sh 2.sh 10 20      #$0:脚本的名字
  2.sh , 10 , 20							   #$1:第一个参数
  										   #$2:第二个参数
  • 预定义变量:Bash中内置的一类变量,不能直接修改

    例如:$? $$

[root@localhost shell]# sh 1.sh
20
[root@localhost shell]# echo $?			# $?判断上一条指令是否正常,0是正常
0
[root@localhost shell]# 1.sh
-bash: 1.sh: 未找到命令
[root@localhost shell]# echo $?
127										#127 表示 "命令未找到",这是 Shell 的特殊退出码之一

[root@localhost shell]# echo $$			# $$ 输出当前命令的进程
9903
[root@localhost shell]# a=`ps aux | grep "9903"`
[root@localhost shell]# echo $a
root 9903 0.0 0.0 115440 2056 pts/0 Ss+ 18:25 0:00 -bash root 9951 0.0 0.0 112724 984 pts/0 S+ 18:52 0:00 grep --color=auto 9903
  1. 变量命名规则

    命名规则:以字母或者下划线开头,区分大小写

[root@localhost shell]# b=1   	#字母开头
[root@localhost shell]# _c=1	#下划线开头
[root@localhost shell]# 1b=1	#不能以数字开头
-bash: 1b=1: 未找到命令
[root@localhost shell]# B=1		#大小写不是一个变量

  1. 变量的赋值
  • 单引号:禁止引用其他变量值,$视为普通字符
[root@localhost shell]# echo '$num'
$num
  • 双引号:允许通过$符号引用其他变量值
[root@localhost ~]# echo $num
10
  • 反撇号: 命令替换,提取命令执行后的输出结果,和$(…)作用相同
[root@localhost shell]# a=`find /opt -name ".txt" | wc -l`
[root@localhost shell]# echo $a
0
  • 弱引用:"$num " 弱引用,其中的变量引用会被替换为变量值
[root@localhost shell]# echo "$num"
10
[root@localhost shell]# echo "${num}"
10
  • 强引用:'$name ’ 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
[root@localhost shell]# echo '$num'
$num
  1. 输入
  • read

  • read -p “提示信息” 变量名

[root@localhost shell]# vi 3.sh
[root@localhost shell]# cat 3.sh
#!/bin/bash
read -p "请输入一个数字:" num
echo "输出数字:$num"
[root@localhost shell]# sh 3.sh
请输入一个数字:30
输出数字:30

  • echo -n “提示信息”

    read 变量名


[root@localhost shell]# vi 4.sh
[root@localhost shell]# cat 4.sh
#!/bin/bash
echo -n "请输入一个数字:"   		#不换行输出文本信息
read num1
echo "输出数字:$num1"
[root@localhost shell]# sh 4.sh
请输入一个数字:50
输出数字:50

3. 条件判断

  • 整数运算

格式:expr 变量1 运算符 变量2 [运算符 变量3]

运算符功能示例结果
+加法expr 10 + 212
-减法expr 10 - 28
\*乘法expr 10 \* 220
/除法expr 10 / 25
%取余expr 10 % 31
#方法1:使用 expr 命令

[root@localhost shell]# expr 10+2		#10+2 被当作一个字符串处理,而不是数学表达式
10+2

[root@localhost shell]# expr 10 + 2		# expr 命令要求运算符两边必须有空格
12

[root@localhost shell]# echo $(expr 10 + 2)
12

[root@localhost shell]# result=`expr 10 + 2`
[root@localhost shell]# echo $result
12

#方法2:使用算术扩展 $(( ))
[root@localhost shell]# echo $(expr 2 \* 3)
6
[root@localhost shell]# echo $((2 * 3))
6

  • 文件和目录测试
操作符功能说明示例
-e测试文件或目录是否存在[ -e /path/to/file ]
-d测试是否为目录[ -d /path/to/dir ]
-f测试是否为普通文件[ -f /path/to/file ]
-L测试是否为符号链接文件[ -L /path/to/link ]
[root@localhost shell]# [ -e /opt ]  
[root@localhost shell]# echo $?
0
  • 文件权限测试
操作符功能说明示例
-r测试文件是否可读[ -r file ]
-w测试文件是否可写[ -w file ]
-x测试文件是否可执行[ -x file ]
[root@localhost shell]# [ -r /opt/shell/1.sh ]
[root@localhost shell]# echo $?
0
  • 字符串比较
操作符功能说明示例
=字符串相等比较[ "$a" = "$b" ]
==字符串相等比较[ "$a" == "$b" ]
!=字符串不相等比较[ "$a" != "$b" ]
-z字符串长度为零[ -z "$str" ]
-n字符串长度非零[ -n "$str" ]
  • 整数值比较
运算符数学符号说明示例
-eq==等于[ $a -eq $b ]
-ne!=不等于[ $a -ne $b ]
-gt>大于[ $a -gt $b ]
-lt<小于[ $a -lt $b ]
-le<=小于等于[ $a -le $b ]
-ge>=大于等于[ $a -ge $b ]
[root@localhost shell]# a=10
[root@localhost shell]# b=20
[root@localhost shell]# [ $a -eq $b ]
[root@localhost shell]# echo $?
1

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值