千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:重庆千锋IT培训  >  技术干货  >  shell变量的学习方式是什么?

shell变量的学习方式是什么?

来源:千锋教育
发布人:lxl
时间: 2023-04-06 11:27:21

  1、Shell 变量?

  用一个固定的字符串去表示不固定的内容

  2、变量的类型

  1、自定义变量

  定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip1=192.168.2.115 引用变量: $变量名 或 ${变量名} 查看变量:echo $变量名 set(所有变量:包括自定义变量和环境变量)取消变量:unset 变量名作用范围:仅在当前Shell中有效

  示例:

  #!/bin/bash

  xihongshi=7

  mogu=6

  huluobo=8

  echo 今日菜价:

  echo

  echo 西红柿:${xihongshi}¥ 一斤

  echo 蘑菇:${mogu}¥ 一斤

  echo 胡萝卜:${huluobo}¥ 一斤

  echo

  echo 欢迎买菜!!! 下次便宜点!!

  2、环境变量

  定义环境变量:

  方法一 export back_dir2=/home/backup

  方法二 export back_dir1 将自定义变量转换成环境变量

  引用环境变量:$变量名 或 ${变量名}

  查看环境变量:echo $变量名 env 例如 env | grep back_dir2set

  取消环境变量:unset 变量名 变量作用范围:在当前Shell和子Shell有效

  3、位置变量

  主要是在脚本执行后加参数!!!

  $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}

  示例:

  #!/bin/bash

  echo 我是谁:$0

  echo 我的第一个位置是: $1

  echo 我的第二个位置是: $2

  echo 我的年龄是:$1

  echo 我的名字是:$2

  echo 我的学校是:$3

  echo 位置变量我学会了!!

  4、预定义变量

  $0 脚本名(自己本身) $*所有的参数* "$" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数$@ 所有的参数 "$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数$# 参数的个数$$当前进程的PID$! 上一个进程的pid$? 上一个命令的返回值 0表示成功

  示例:

  #!/bin/bash

  echo "我的脚本是存在的: $0"

  echo "我的所有参数为: $*"

  echo "我的所有参数为: $@"

  echo "我的参数个数为:$#"

  echo "我的系统当前pid为:$$"

  sleep 1000 &

  echo "我的系统上一个pid为:$!"

  echo pwd

  echo "我上一个命令: $?"

  示例1:

  # vim test.shecho

  "第2个位置参数是$2"echo

  "第1个位置参数是$1"echo

  "第4个位置参数是$4"echo

  "所有参数是: $*"echo

  "所有参数是: $@"echo

  "参数的个数是: $#"

  echo "当前进程的PID是: $$"

  echo '$1='$1

  echo '$2='$2

  echo '$3='$3

  echo '$*='$*

  echo '$@='$@

  echo '$#='$#

  echo '$$='$$

  3、变量的赋值方式

  1、显式赋值

  变量名=变量值

  示例:

  ip1=192.168.1.251

  school="BeiJing 1000phone" ' '

  today1=`date +%F` 截取命令中本身含义

  today2=$(date +%F) 截取命令中本身含义

  2、read 从键盘读入变量值

  read 变量名

  read -p "提示信息: " 变量名

  read -t 5 -p "提示信息: " 变量名

  read -n 2 变量名

  read: 用法:read -ers -d 分隔符 -n 读取字符数 -p 提示符 -u 文件描述符

  -s 不显示输出内容

  stty -echo (stty echo) 命令行影藏输入

  示例3

  #!/bin/bash

  read -p "请输入你的姓名:"

  nameread -p "请输入你的密码:"

  passecho

  echo 你的姓名是:$name

  echo 你的密码是: $pass

  #!/bin/bash

  read -p "请输入你的姓名:" name

  read -s -p "请输入你的密码:" passecho

  echo 你的姓名是:$name

  echo 你的密码是: $pass

  [root@qfdeu ~]# vim first.sh

  back_dir1=/var/backup

  read -p "请输入你的备份目录: " back_dir2

  echo $back_dir1

  echo $back_dir2

  [root@qfdeu ~]# sh first.sh

  示例4:

  [root@qfdeu ~]# vim ping2.sh

  #!/bin/bash

  read -p "Input IP: " ip

  ping -c2 $ip &>/dev/null

  if [ $? = 0 ];then

  echo "host $ip is ok"

  else

  echo "host $ip is fail"

  fi

  [root@qfdeu ~]# chmod a+x ping2.sh

  [root@qfdeu ~]# ./ping.sh

  4、定义引用变量

  " " 弱引用

  ' ' 强引用

  [root@qfdeu ~]# school=1000phone

  [root@qfdeu ~]# echo "${school} is good"

  1000phone is good

  [root@qfdeu ~]# echo '${school} is good'

  ${school} is good

  (反引号)命令替换 等价于 $() 反引号中的Shell命令会被先执行

  [root@qfdeu ~]# touch `date +%F`_file1.txt

  [root@qfdeu ~]# touch $(date +%F)_file2.txt

  [root@qfdeu ~]# disk_free3="df -Ph |grep '/$' |awk '{print $4}'" # 错误

  [root@qfdeu ~]# disk_free4=$(df -Ph |grep '/$' |awk '{print $4}')

  [root@qfdeu ~]# disk_free5=`df -Ph |grep '/$' |awk '{print $4}'`

  5、变量的运算

  1、整数运算

  方法一:expr

  [root@qfdeu ~]# expr 1 + 2

  [root@qfdeu ~]# expr $num1 + $num2 + - \* / %

  方法二:$(())

  [root@qfdeu ~]# echo $(($num1+$num2)) + - * / %

  [root@qfdeu ~]# echo $((num1+num2))

  [root@qfdeu ~]# echo $((5-3*2))

  [root@qfdeu ~]# echo $(((5-3)*2))

  [root@qfdeu ~]# echo $((2**3))

  [root@qfdeu ~]# sum=$((1+2)); echo $sum

  方法三:$[]

  [root@qfdeu ~]# echo $[5+2] + - * / %

  [root@qfdeu ~]# echo $[5**2]

  方法四:let

  [root@qfdeu ~]# let sum=2+3; echo $sum

  [root@qfdeu ~]# let i++; echo $i

  let a+=2 //和a=a+2的效果一样

  += 加等

  *= 乘等

  -= 减等

  /= 除等

  %= 模等

  2、小数运算

  [root@qfdeu ~]# echo "2*4" |bc

  [root@qfdeu ~]# echo "2^4" |bc

  [root@qfdeu ~]# echo "scale=2;6/4" |bc

  [root@qfdeu ~]# awk 'BEGIN{print 1/2}'

  [root@qfdeu ~]# echo "print 5.0/2" |python

  随机数: $RANDOM

  6、变量截取

  1、匹配截取

  [root@qfedu ~]# url=www.sina.com.cn

  [root@qfedu ~]# echo ${#url} # 获取变量值的长度15

  [root@qfedu ~]# echo ${url} # 标准查看

  www.sina.com.cn

  [root@qfedu ~]# echo ${url#*.} # 从前往后,最短匹配

  sina.com.cn

  [root@qfedu ~]# echo ${url##*.} # 从前往后,最长匹配 贪婪匹配

  cn

  [root@qfedu ~]# url=www.sina.com.cn

  [root@qfedu ~]# echo ${url}

  www.sina.com.cn

  [root@qfedu ~]# echo ${url%.*} # 从后往前,最短匹配

  www.sina.com

  [root@qfedu ~]# echo ${url%%.*} # 从后往前,最长匹配 贪婪匹配

  www

  [root@qfedu ~]# url=www.sina.com.cn

  [root@qfedu ~]# echo ${url#a.}

  www.sina.com.cn

  [root@qfedu ~]# echo ${url#*sina.}

  com.cn

  [root@qfedu ~]# echo $HOSTNAME

  qfedu.1000phone.com

  [root@qfedu ~]# echo ${HOSTNAME%%.*}

  qfedu

  2、索引及切片

  [root@qfedu ~]# echo ${url:0:5}

  [root@qfedu ~]# echo ${url:5:5}

  [root@qfedu ~]# echo ${url:5}

  3、"内容"的替换

  [root@qfedu ~]# url=www.sina.com.cn

  [root@qfedu ~]# echo ${url/sina/baidu}

  www.baidu.com.cn

  [root@qfedu ~]# url=www.sina.com.cn

  [root@qfedu ~]# echo ${url/n/N}

  www.siNa.com.cn

  [root@qfedu ~]# echo ${url//n/N} 贪婪匹配

  www.siNa.com.cN

  4、变量的替代

  [root@qfedu ~]# unset var1

  [root@qfedu ~]#

  [root@qfedu ~]# echo ${var1}

  [root@qfedu ~]# echo ${var1-aaaaa}

  aaaaa

  [root@qfedu ~]# var2=111

  [root@qfedu ~]# echo ${var2-bbbbb}

  111

  [root@qfedu ~]#

  [root@qfedu ~]# var3=

  [root@qfedu ~]# echo ${var3-ccccc}

  5、${变量名-新的变量值}

  变量没有被赋值:会使用“新的变量值“ 替代

  变量有被赋值(包括空值): 不会被替代

  [root@qfedu ~]# unset var1

  [root@qfedu ~]# unset var2

  [root@qfedu ~]# unset var3

  [root@qfedu ~]#

  [root@qfedu ~]# var2=

  [root@qfedu ~]# var3=111

  [root@qfedu ~]# echo ${var1:-aaaa}

  aaaa

  [root@qfedu ~]# echo ${var2:-aaaa}

  aaaa

  [root@qfedu ~]# echo ${var3:-aaaa}

  111

  6、${变量名:-新的变量值}

  变量没有被赋值(包括空值):都会使用“新的变量值“ 替代

  变量有被赋值: 不会被替代

  [root@qfedu ~]# echo ${var3+aaaa}

  [root@qfedu ~]# echo ${var3:+aaaa}

  [root@qfedu ~]# echo ${var3=aaaa}

  [root@qfedu ~]# echo ${var3:=aaaa}

  [root@qfedu ~]# echo ${var3?aaaa}

  [root@qfedu ~]# echo ${var3:?aaaa}

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

java的输入语句—— Scanner类

2023-05-04

java数据库操作常识事务的四大特性

2023-05-04

DML数据操作之增加或删除数据

2023-05-04

最新文章NEW

socket是什么?有什么作用?

2023-05-04

Java常量定义是什么

2023-04-28

一分钟带你学多线程

2023-04-28

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>