我是靠谱客的博主 活泼水杯,最近开发中收集的这篇文章主要介绍shell学习(变量),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

shell变量

shell变量分为四种:自定义变量、环境变量、位置变量、预定义变量
自定义变量:用户本身自己定义的变量
环境变量 例:USER SHELL(解释器) HOME PATH(命令存放路径)
echo $PS1 一级提示符
echo $PS2 二级提示符
echo $UID 查看当前用户ID
位置变量 $1,$2,$3…
在这里插入图片描述

测试变量效果
echo $1
echo $2
echo $3
echo $$   #程序进程号
echo $#   #所有位置变量的数量
echo $*    #显示所有的位置变量
echo $@  #与$*作用一致,加引号作用不一样,$*作为一个整体,$@作为多个字符串
echo $?    #检测上一条指令的结果    0:正确   非0:错误
echo $0    #脚本执行名称
echo $!    #查看最后一条放入后台的程序进程号
echo $_   #获得上一条命令的最后一个参数
env   #显示所有的环境变量
echo ${#s}  #显示变量s的长度

3种引号的使用
" " 界定范围
[root@ha131 shell]# a=10
[root@ha131 shell]# echo “$a”
10

' '   界定范围,可以屏蔽特殊符号   
echo '$a'   
$a

(反撇号)得到指令的结果
a=date //定义变量a,
在这里插入图片描述

a=$(date)   //结果等同于反撇号

删除变量值
unset  a   #清空变量值

在这里插入图片描述
发布全局变量(全局变量不局限于当前解释器,)
a=10
export a //对已有变量,发布为全局变量
export a=10 //创建变量,发布为全局变量
取消全局变量
export -n a
测试:创建一个全局变量a,开启一个新的bash解释器测试a的值,取消全局变量a,然后再次测试a的值
在这里插入图片描述

shell中的运算在这里插入图片描述

[root@ha131 /]# expr 1 + 1
2
[root@ha131 /]# expr 2 - 1
1
[root@ha131 /]# expr 2 '’ 1
2
[root@ha131 /]# expr 2 * 2
4
[root@ha131 /]# expr 2 / 2
1
[root@ha131 /]# expr 20 % 2
0
2. echo $[ ] 或者 echo $(())也能支持上述五种方式
[root@ha131 /]# echo $[1+1]
2
[root@ha131 /]# echo $[2-1]
1
[root@ha131 /]# echo $[2
1]
2
[root@ha131 /]# echo $[2/1]
2
[root@ha131 /]# echo $[1%1]
0
3. let 可以改变变量本身的值,不显示结果
[root@ha131 /]# a=10;b=1
[root@ha131 /]# let a++
[root@ha131 /]# echo $a
11
[root@ha131 /]# let a+=2
[root@ha131 /]# echo $a
13
[root@ha131 /]# let a+=b
[root@ha131 /]# echo $a
14

shell条件测试

常用条件判断:

== (等于)
!=(不等于)
-z (判断变量是否为空)
!-z(判断变量是否不为空)
-n(效果等同于!-z,测试时变量加引号)
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
-e 判断对象是否存在
-d 判断对象是否为目录
-f 判断对象是否问文件
-r 判断文件是否可读 对root无效
-w 判断文件是否可写 对root无效
-x 判断文件是否可执行
&& 且
|| 或
; 前面任务执行完毕后,继续执行后续任务,前后无逻辑关系

[ abc == abc ] //常量对比 ,echo $?得到结果
[root@ha131 /]# [ abc == abc ]
[root@ha131 /]# echo $?
0
判断是否为root
[ $UID -le 0 ]
[ $USER != root ] (不是管理员)
[ $USER == root ] //使用环境变量对比当前用户身份
echo $? //通过查看返回值来判断身份
逻辑符号 && (前面执行成功后面继续执行 ) ||(前面执行失败后面继续执行)
例:
[root@ha131 ~]# [ $USER == root ] && echo 123 //用户为管理员,才输出123
123
[root@ha131 ~]# [ $USER != root ] && echo 123
[root@ha131 ~]# [ $USER != root ] || echo 123
123

-z 判断变量是否为空
[root@ha131 ~]# a=
[root@ha131 ~]# [ -z $a ]
[root@ha131 ~]# echo $?
0
[root@ha131 ~]# a=10
[root@ha131 ~]# [ -z $a ]
[root@ha131 ~]# echo $?
1
例:编写一个创建用户的脚本,用户输入用户名和密码,当用户输入用户名为空时,退出脚本

#! /bin/bash
read -p "请输入您要创建的用户名: " a
[ -z $a ] && echo "用户名输入为空" && exit   # 输入为空退出脚本
 useradd $a   &> /dev/null
 echo 用户$a创建成功
 stty -echo   #关闭回显
read -p '请输入你要设置的密码' b
 echo ${b:-123} |  passwd --stdin $a  &> /dev/null
 stty echo     #开启回显
 echo 用户$a密码设置成功

; 前面任务执行完毕后,继续执行后续任务,前后无逻辑关系

数字对比(不支持小数)

[root@ha131 ~]# [ 0123 -eq 123 ]
[root@ha131 ~]# echo $?
0
[root@ha131 ~]# [ 0123 == 123 ]
[root@ha131 ~]# echo $?
1
数字对比如果使用 ==可能会出现错误

-e 判断对象是否存在
[root@ha131 shell]# mkdir /root/bai
[root@ha131 shell]# [ -e /root/bai ]
[root@ha131 shell]# echo $?
1
[root@ha131 shell]# mkdir /root/bai
[root@ha131 shell]# [ -e /root/bai ]
[root@ha131 shell]# echo $?
0
-d 判断对象是否为目录
-f 判断对象是否问文件
[root@ha131 shell]# [ -f /root/bai ]
[root@ha131 shell]# echo $?
1
[root@ha131 shell]# [ -d /root/bai ]
[root@ha131 shell]# echo $?
0
判断文件权限
-r 是否可读 对root无效
-w 是否可写 对root无效
-x 是否可执行
测试文件权限
[root@ha131 shell]# touch a
[root@ha131 shell]# ll
total 12
-rw-r–r--. 1 root root 0 Jun 22 17:58 a
-rw-r–r--. 1 root root 116 Jun 13 23:55 a.sh
-rwxr-xr-x. 1 root root 235 Jun 21 20:51 ceshi.sh
-rwxr-xr-x. 1 root root 371 Jun 21 19:23 useradd.sh
[root@ha131 shell]# [ -r a ]
[root@ha131 shell]# echo $?
0
[root@ha131 shell]# [ -w a ]
[root@ha131 shell]# echo $?
0
[root@ha131 shell]# [ -x a ]
[root@ha131 shell]# echo $?
1
[root@ha131 shell]# [ -d a ] && echo “mkdir” || echo “touch”
touch
[root@ha131 shell]# [ -f a ] && echo “mkdir” || echo “touch”
mkdir
[root@ha131 shell]# [ -e a ] && echo “mkdir” || echo “touch”
mkdir
[root@ha131 shell]# rm a
[root@ha131 shell]# [ ! -e a ] && echo “mkdir” || echo “touch”
mkdir
-n 的效果等同于 !-z (-n测试时,变量加" ")
[root@ha131 shell]# a=
[root@ha131 shell]# [ -z $a ] && echo $?
0

[root@ha131 shell]# [ ! -z $a ] && echo $? || echo $?

1
[root@ha131 shell]# [ -n “$a” ] && echo $? || echo $?
1

最后

以上就是活泼水杯为你收集整理的shell学习(变量)的全部内容,希望文章能够帮你解决shell学习(变量)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部