文章目录

  • 1.变量的定义
  • 2.shell脚本中变量的定义方法
  • 3.变量的转译
  • 4.Linux中命令的别名设定
  • 5.用户环境变量的更改
  • 6.利用命令的执行结果设定变量
    • $()和``的区别:
    • 非交互模式传参
  • 7.脚本函数
    • 练习

1.变量的定义

  • 1)定义本身
    变量就是内存一片区域的地址

  • 2)变量存在的意义
    命令无法操作一直变化的目标
    用一串固定的字符来表示不固定的目标可以解决此问题

2.shell脚本中变量的定义方法

  • 1)环境级别
    export a=1
    在环境关闭后变量失效

  • 2)用户级别
    vim ~/.bash_profile
    export a=1

  • 3)系统级别
    vim /etc/profile
    export a=2
    vim /etc/profile.d/westos.sh
    export b=3

%env显示所有的环境变量
1)环境级别
[root@node2 ~]# cat /mnt/westos.sh
echo $WESTOS
[root@node2 ~]# export WESTOS=1
[root@node2 ~]# sh /mnt/westos.sh
1
2)用户级别,切换用户就不能使用了
[root@node2 ~]# vim ~/.bash_profile
export WESTOS=1
[root@node2 ~]# exit
exit
[westos@node2 Desktop]$ sh /mnt/westos.sh 3)系统级别
[root@node2 mnt]# cd /etc/profile.d
[root@node2 profile.d]# vim westos.sh
export WESTOS=1
另开一个shell在普通用户下进行测试
[root@node2 profile.d]# sh /mnt/westos.sh
2
[root@node2 ~]# chmod +x /mnt/westos.sh
[root@node2 ~]# vim .bash_profile
添加:export PATH=$PATH:/mnt
[root@node2 ~]# source .bash_profile
[root@node2 ~]# echo $PATH
[root@node2 ~]# westos.sh
1
[root@node2 ~]# sh westos.sh  #不用/mnt/就能用
  • 4)变量名称
    “字符” “_” “数字”
    不能用数字开头
    建议:
    变量名称短全用大写字符
    变量名称长用_区分子类
    WESTOS
    Westos_Linux
    westoS_Linux

3.变量的转译

  • 1)转译
    \ #转译单个字符
    “” #弱引用,批量转译个数字符 不能转译"" “`” “$” “!”
    ‘’ #强引用

  • 2)声明
    a=1
    echo $ab
    echo ${a}b

  • 3)变量的数组
    a=(1 2 3 4 5)
    echo ${a[0]} #取第一个元素
    echo ${a[-1]}#取最后一个元素
    echo ${a[*]} #数组中所有元素;*是表示“1 2 3 4 5”
    echo ${a[@]} #数组中所有元素;@是表示“1” “2” “3” “4” “5”
    echo ${a[@]:0:3} #从第1个元素开始王后取3个
    echo ${#a[@]} #数组元素个数

1)
[root@node2 ~]# echo \$5    #\只能转移单个字符
$5
[root@node2 ~]# echo \$5\$6 #转移两个字符
$5$6
[root@node2 ~]# echo "!5"  #“”批量转移字符,但不能%echo不能引用 "! ` \ $"四个
echo "nmcli connection reload "
nmcli connection reload
[root@node2 ~]# echo "444444"
4444442)
[root@node2 ~]# A=1
[root@node2 ~]# echo $Ab
[root@node2 ~]# echo ${A}b #声明
1b3)
[root@node2 ~]# A=(1 2 3 4 5 6)
[root@node2 ~]# echo ${A}#取第一个元素
1
[root@node2 ~]# echo ${A[0]}#取第一个元素
1
[root@node2 ~]# echo ${A[1]}#取第二个元素
2
[root@node2 ~]# echo ${A[-1]}#取最后一个元素
6
[root@node2 ~]# echo ${A[*]}#数组中所有元素
1 2 3 4 5 6
[root@node2 ~]# echo ${A[@]}#数组中所有元素
1 2 3 4 5 6
[root@node2 ~]# echo ${A[@]:0:3}#从第1个元素开始王后取3个
1 2 3
[root@node2 ~]# echo ${A[@]:2:2}#从第3个元素开始王后取2个
3 4
[root@node2 ~]# echo ${#A[@]}#数组元素个数
6%例子
[root@node2 ~]# ifconfig enp1s0 | grep 'inet\>'inet 172.25.254.203  netmask 255.255.255.0  broadcast 172.25.254.255
[root@node2 ~]# IP=(`ifconfig enp1s0 | grep 'inet\>'`)  #IP即是一个数组,元素是inet一行元素
[root@node2 ~]# echo ${IP[1]}  #显示第二个元素
172.25.254.203

4.Linux中命令的别名设定

  • 1)alias xie=‘vim’ ##临时设定

  • 2)vim ~/.bashrc
    alias xie=‘vim’ ##只针对与用户生效

  • 3)vim /etc/bashrc ##针对系统所以用户生效
    alias xie=‘vim’

  • 4)unalias xie ##删除当前环境中的alias
    alias xie=‘vim’

5.用户环境变量的更改

环境变量:
用户在操作系统时使用到的命令搜索路径

设定方式:
~/.bash_profile
export PATH=$PATH:/mnt

/etc/bash_profile
export PATH=$PATH:/mnt

%环境级别
[root@node2 ~]# alias xie='vim'
[root@node2 ~]# xie
[root@node2 ~]# exit
exit
[westos@node2 Desktop]$ su
Password:
[root@node2 Desktop]# xie  #环境级别,退出再登陆时就会失效
bash: xie: command not found...
%用户级别
[root@node2 Desktop]# cd
[root@node2 ~]# vim .bash_profile
[root@node2 ~]# vim .bashrc
alias xie='vim'
[root@node2 ~]# source .bashrc
[root@node2 ~]# xie
[root@node2 ~]# exit
exit
[westos@node2 Desktop]$ xie
bash: xie: command not found...
[westos@node2 Desktop]$ su
Password:
[root@node2 Desktop]# xie  #用户级别,退出到其他用户不行,再次登陆本用户时还可以
%系统级别
[root@node2 ~]# vim /etc/bashrc
最后添加:alias xie='vim'
[westos@node2 Desktop]$ xie #系统级别。关掉重新打开shell,再普通用户下也能看到xie[root@node2 ~]# unalias xie  #删除变量xie
[root@node2 ~]# alias  #查看变量

6.利用命令的执行结果设定变量

  • 1)直接利用命令执行结果
    $()|`` ##优先执行。

如:TEST=hostname TEST=$(hostname)

  • 2)脚本中的传参
    非交互模式:
    $0 is /mnt/test.sh ##脚本本身
    $1 is westos ##脚本后所输入的第一串字符
    $2 is linux
    $3 is redhat
    $* is westos linux redhat ##脚本后所输入的所有字符"westos linux redhat"
    $@ is westos linux redhat ##脚本后所输入的所有字符’westos’ ‘linux’ ‘redhat’
    $# is 3 ##脚本后所输入的字符串个数
    交互模式传参:
    read WESTOS ##对westos赋值
    read -p “please input word:” ##输出提示语
    -s ##隐藏输入内容
$()和``的区别:
1,
[root@node2 ~]# cd /mnt/
[root@node2 mnt]# ls
apache_port.sh  clear_log.sh  host_message.sh  ip_show.sh  passwd  westos  westos.sh
[root@node2 mnt]# vim  test.pl
#!/usr/bin/perl
print "Content-type:text/hyml\n\n";
print `date`;[root@node2 mnt]# perl test.pl
Content-type:text/hymlSat Dec 19 17:14:34 WITA 2020
[root@node2 mnt]# vim test.pl
#!/usr/bin/perl
print "Content-type:text/hyml\n\n";
print $(date);[root@node2 mnt]# perl test.pl   #$出错误了
Bareword found where operator expected at test.pl line 3, near "$(date"(Missing operator before date?)
syntax error at test.pl line 3, near "date)"
Execution of test.pl aborted due to compilation errors.
2,
[root@node2 mnt]# vim westos.sh
#!/bin/env bash
echo '$0' $0
echo '$1' $1
echo '$2' $2
echo '$3' $3
echo '$#' $#
echo '$*' $*
echo '$@' $@
for i in "$*"
doecho $i
done
~
[root@node2 mnt]# sh westos.sh westos linux javar[root@node2 mnt]# sh -x westos.sh westos linux javar  #"$*";查看for循环了一次[root@node2 mnt]# vim westos.sh
for i in "$*"一行改为for i in "$@"
[root@node2 mnt]# sh -x westos.sh westos linux javar#"$@";查看for循环了三次


非交互模式传参
%交互模式传参:
[root@node2 mnt]# vim westos.sh
#!/bin/env bash
read -p "please input word: " -s WORD  #-s不显示输入的word
echo ""  #回车
echo $WORD[root@node2 mnt]# sh westos.sh
please input word:
ecer

7.脚本函数

  • 1)定义:
    程序的别名

  • 2)设定方式:

WORD()
{action1action2
}
WORD 在脚本中就代表action1 action2这两个动作

例子:

[root@node2 mnt]# vim color.sh
#!/bin/env bash
ECHO()
{echo -e "\033[$1m$2\033[0m"
}
ECHO 31 "hello westos"
ECHO 32 "HELLO LINUX"
[root@node2 mnt]# sh color.sh

注意:$1时脚本后跟的第一串字符,$2时第二串字符。echo是函数,变量不能一样,用大写

练习

sh create_user.sh
Please input username:westos
westos exist---------> westos id exist—> Please input username:westos
westos not exist------Please input password:无回显密码
此用户自动建立并且密码为提示后设定的密码
并显示:westos is created
并再次提示Please input username:
当Please input username:exit 时退出

[root@node2 mnt]# vim create2_user.sh
#!/bin/bash
EXIT()
{read -p "Please input username: "  username[ "$username" = "exit" ]||[ "$username" = "EXIT" ] &&{echo "bye"exit}||{USER_ACTION $username}
}USER_ACTION()
{id $1 &> /dev/null && {echo "$1 is exist"EXIT}|| {read -p "Please input password: " -s passwordecho ""useradd $1echo $password | passwd --stdin $1 &> /dev/null && echo $1 is createdEXIT}
}
EXIT

shell(4)shell脚本中的变量相关推荐

  1. shell脚本中的变量

    shell脚本中的变量 1 变量的定义 2 shell脚本中变量的定义方法 2.1 环境级别 2.2 用户级别 2.3 系统级别 3 变量名称 4 变量的转译 4.1 转译 4.2 声明 4.3 变量 ...

  2. 7月11日任务 shell介绍、shell结构和执行 、date命令用法、shell脚本中的变量

    2019独角兽企业重金招聘Python工程师标准>>> 20.1 Shell脚本介绍 • shell是一种脚本语言  aming_linux  blog.lishiming.net ...

  3. Linux:shell脚本中实现变量自增的几种方式

    #!/bin/sh #本脚本测试shell脚本中整型变量自增 加1的几种方法   #定义整型变量 a=1 echo $a   #第一种整型变量自增方式 a=$(($a+1)) echo $a   #第 ...

  4. 20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量...

    2019独角兽企业重金招聘Python工程师标准>>> 20.1 shell脚本介绍 shell 是一种脚本语言:和传统的开发语言比较,会比较简单 shell有自己的语法:可以使用逻 ...

  5. 在Shell或Bat脚本中激活conda环境

    转自:https://heary.cn/posts/%E5%9C%A8Shell%E6%88%96Bat%E8%84%9A%E6%9C%AC%E4%B8%AD%E6%BF%80%E6%B4%BBcon ...

  6. linux 引用其它脚本中的变量

    前言 CentOS Linux release 7.9.2009 (Core) 引用其它脚本中的变量 a.sh var_a=zhangsan echo $var_a b.sh source a.sh ...

  7. sed在shell脚本中引用变量

    需求 在测试过程中,有很多配置项是写在文件中的,这时想通过脚本来改文件内容,这是个很常见的需求 问题 sed 是linux里很强大好用的文本修改工具,但是在使用过程中,需要在shell里的sed语句中 ...

  8. 详解shell脚本中的变量

    目录 一.变量的定义及存在的意义 二.shell脚本中变量的定义方法 1.环境级别 2.用户级别 3.系统级别 三.变量名称 四.变量的转译 1.转译 2.声明 3.变量的数组 五. Linux中命令 ...

  9. shell脚本中的变量及其应用

    1.变量的定义 1)定义本身 变量就是内存当中一片区域的地址 2)变量存在的意义 命令无法操作一直变化的目标 用一串固定的字符来表示不固定的目标可以解决此问题 2.shell脚本中变量的定义方法 1) ...

最新文章

  1. css标签显示特性(块级元素、行内元素、行内块元素、标签显示模式转换display、简单文字居中、简单导航栏案例)
  2. 如何配置Linux的时钟同步
  3. SSM框架——使用MyBatis Generator自动创建代码
  4. 好好说说Java中的常量池之Class常量池 1
  5. matlab仿真模拟随机过程,基于MATLAB的随机过程仿真.pdf
  6. 2.2.1.处理机调度的概念,层次
  7. SpringRMI解析3-RmiServiceExporter逻辑细节
  8. 1064. Complete Binary Search Tree
  9. 2015年国民经济和社会发展统计公报
  10. Qt学习之路 (一)概述
  11. F2FS文件系统一 设计背景及框架结构
  12. MyBatis文档观后整理
  13. python 公众号付费视频地址_Python下载微信公众号文章内的视频
  14. flex:1代表什么意思
  15. 狭义货币供应量M1的同比增速对我国股市影响最直接
  16. 解决烘焙光照贴图有黑斑
  17. 2021 国内外 IoT 物联网平台汇总
  18. Nexus Repository Manager 3 远程命令执行漏洞(CVE-2020-10204),CVE-2020-11444 越权漏洞
  19. IWS国际儿童及青少年水彩画大赛开始了
  20. STC15单片机-ADC获取环境温度(NTC热敏电阻)

热门文章

  1. 教育——开源在线考试系统
  2. 从汽车之家上市谈电商
  3. 华为认证安全工程师HCIA-Security V4.0(中文版)预发布通知
  4. 三角函数 求模 和 求角度算法
  5. 【Zigbee】Zigbee ZCL report command 相关翻译
  6. 从简历被拒,到拿下头条面试,我花了一年的时间(经验分享+面试题)
  7. 机器学习的划分:监督学习、非监督学习、强化学习、进化学习
  8. 价值15000的大数据全套视频免费分享!!
  9. pmbook 知识领域 第六版_PMBOK第六版10大知识领域ITTO思维导图-干货
  10. ​​2023年腾讯云轻量应用服务器和云服务器CVM区别