shell(4)shell脚本中的变量
文章目录
- 1.变量的定义
- 2.shell脚本中变量的定义方法
- 3.变量的转译
- 4.Linux中命令的别名设定
- 5.用户环境变量的更改
- 6.利用命令的执行结果设定变量
- $()和``的区别:
- 非交互模式传参
- 7.脚本函数
- 练习
1.变量的定义
1)定义本身
变量就是内存一片区域的地址2)变量存在的意义
命令无法操作一直变化的目标
用一串固定的字符来表示不固定的目标可以解决此问题
2.shell脚本中变量的定义方法
1)环境级别
export a=1
在环境关闭后变量失效2)用户级别
vim ~/.bash_profile
export a=13)系统级别
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}b3)变量的数组
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脚本中的变量相关推荐
- shell脚本中的变量
shell脚本中的变量 1 变量的定义 2 shell脚本中变量的定义方法 2.1 环境级别 2.2 用户级别 2.3 系统级别 3 变量名称 4 变量的转译 4.1 转译 4.2 声明 4.3 变量 ...
- 7月11日任务 shell介绍、shell结构和执行 、date命令用法、shell脚本中的变量
2019独角兽企业重金招聘Python工程师标准>>> 20.1 Shell脚本介绍 • shell是一种脚本语言 aming_linux blog.lishiming.net ...
- Linux:shell脚本中实现变量自增的几种方式
#!/bin/sh #本脚本测试shell脚本中整型变量自增 加1的几种方法 #定义整型变量 a=1 echo $a #第一种整型变量自增方式 a=$(($a+1)) echo $a #第 ...
- 20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量...
2019独角兽企业重金招聘Python工程师标准>>> 20.1 shell脚本介绍 shell 是一种脚本语言:和传统的开发语言比较,会比较简单 shell有自己的语法:可以使用逻 ...
- 在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 ...
- linux 引用其它脚本中的变量
前言 CentOS Linux release 7.9.2009 (Core) 引用其它脚本中的变量 a.sh var_a=zhangsan echo $var_a b.sh source a.sh ...
- sed在shell脚本中引用变量
需求 在测试过程中,有很多配置项是写在文件中的,这时想通过脚本来改文件内容,这是个很常见的需求 问题 sed 是linux里很强大好用的文本修改工具,但是在使用过程中,需要在shell里的sed语句中 ...
- 详解shell脚本中的变量
目录 一.变量的定义及存在的意义 二.shell脚本中变量的定义方法 1.环境级别 2.用户级别 3.系统级别 三.变量名称 四.变量的转译 1.转译 2.声明 3.变量的数组 五. Linux中命令 ...
- shell脚本中的变量及其应用
1.变量的定义 1)定义本身 变量就是内存当中一片区域的地址 2)变量存在的意义 命令无法操作一直变化的目标 用一串固定的字符来表示不固定的目标可以解决此问题 2.shell脚本中变量的定义方法 1) ...
最新文章
- css标签显示特性(块级元素、行内元素、行内块元素、标签显示模式转换display、简单文字居中、简单导航栏案例)
- 如何配置Linux的时钟同步
- SSM框架——使用MyBatis Generator自动创建代码
- 好好说说Java中的常量池之Class常量池 1
- matlab仿真模拟随机过程,基于MATLAB的随机过程仿真.pdf
- 2.2.1.处理机调度的概念,层次
- SpringRMI解析3-RmiServiceExporter逻辑细节
- 1064. Complete Binary Search Tree
- 2015年国民经济和社会发展统计公报
- Qt学习之路 (一)概述
- F2FS文件系统一 设计背景及框架结构
- MyBatis文档观后整理
- python 公众号付费视频地址_Python下载微信公众号文章内的视频
- flex:1代表什么意思
- 狭义货币供应量M1的同比增速对我国股市影响最直接
- 解决烘焙光照贴图有黑斑
- 2021 国内外 IoT 物联网平台汇总
- Nexus Repository Manager 3 远程命令执行漏洞(CVE-2020-10204),CVE-2020-11444 越权漏洞
- IWS国际儿童及青少年水彩画大赛开始了
- STC15单片机-ADC获取环境温度(NTC热敏电阻)
热门文章
- 教育——开源在线考试系统
- 从汽车之家上市谈电商
- 华为认证安全工程师HCIA-Security V4.0(中文版)预发布通知
- 三角函数 求模 和 求角度算法
- 【Zigbee】Zigbee ZCL report command 相关翻译
- 从简历被拒,到拿下头条面试,我花了一年的时间(经验分享+面试题)
- 机器学习的划分:监督学习、非监督学习、强化学习、进化学习
- 价值15000的大数据全套视频免费分享!!
- pmbook 知识领域 第六版_PMBOK第六版10大知识领域ITTO思维导图-干货
- ​​2023年腾讯云轻量应用服务器和云服务器CVM区别