首页 > 系统相关 >shell补-变量再见变量

shell补-变量再见变量

时间:2023-12-15 10:34:19浏览次数:33  
标签:shell 再见 变量 sh str root localhost sub

shell补-变量-变量

变量的本质

shell补-变量常见的环境变量
环境变量 含义 备注
LANG language 记录系统字符集 语言 zh_CN.UTF-8 en_US.UTF-8 localectl(centos7)修改文件/etc/sysconfig/i18n(centos6.x)
PS1 命令行格式
PATH 命令路径
执行命令,系统会在PATH路径中查证
存放的哪些命令文件的路径在哪儿
UID 记录用户的UID信息 脚本中判断用户是否是root
HOSTNAME 主机名
历史命令相关 HIST history
HISTSIZE history命令记录条数最多 history -c/-w/-a/-d
HISTFILESIZE history 文件记录的最多条数 指定历史记录文件的位置
HISTFILE 指定历史记录文件的位置 文件默认在用户当前家目录~/.bash_history
TMOUT 不进行操作 自动断开时间
HISTCONTROL 控制history命令是否记录以空格开头的命令 export HISTCONTROL=Ignorespace 以空格开头的命令不会被记录到history中
PROMPT_COMMAND 存放的命令/脚本会在下1个命令执行前运行 可记录用户操作

历史记录文件说不定能查到修改的密码 ,比如修改的命令记录到历史文件

如果用到 HISTCONTROL 让空格开头的命令不如历史记录,只需要在命令前面加上空格

##测试一个有意思的环境变量
[root@localhost ~]# export PROMPT_COMMAND=date
2023年 10月 11日 星期三 15:45:25 CST
[root@localhost ~]# echo hello
hello
2023年 10月 11日 星期三 15:45:31 CST
[root@localhost ~]# 

shell补-变量与变量相关的文件

每次登录系统,切换用户会读取的文件

文件名 作用 备注理解
/etc/profile 存放环境变量 和别名 全局生效
/etc/bashrc 别名 全局生效
~/.bashrc 当前用户的别名 局部生效
~/.bash_profile 当前用户的环境变量 局部生效
/etc/profile.d/xxxx.sh 用户登录后执行这个目录下,以.sh结尾的脚本 应用场景:自己书写个跳板机,
跳板机脚本可以放在这里

/etc/profile.d/目录下的一定要用.sh结尾;在我们做些需求有用户执行命令,行为审计,跳板机这类的时候可以使用,因为这些脚本用户不想执行,就可以放这目录

总结:找shell编程火三剑客题目刷个100多就差不多了

shell补-变量特殊变量

位置变量

$0 :脚本名字 一般应用在,如果脚本执行错误,给出错误提示或使用帮助

[root@localhost hello]# cat testvar.sh 
#!/bin/bash

[ "$#" -ne "1" ] && echo  "$0 :需要只能录入一个参数" || echo "欢迎登陆,${1}"
[root@localhost hello]# sh testvar.sh  mrxu
欢迎登陆,mrxu
[root@localhost hello]# sh testvar.sh  mrxu root
testvar.sh :需要只能录入一个参数      ####有帮助提示的作用
[root@localhost hello]# 

可以通过man bash 搜Special Parameters

表示状态的特殊变量

$?:针对命令行执行结果,注意可能有些命令可能执行成功了,但是结果不是 0

$$:当前进程号;或生成PID文件;服务管理脚本时使用

###一个窗口开启进程等待
[root@localhost sub_str]# sh testprc.sh 
当前进程号  4257
^C 
[root@localhost sub_str]# cat testprc.sh 
#!/bin/bash

echo "当前进程号  "$$
sleep 999
[root@localhost sub_str]# 

###另一个窗口查看
[root@localhost ~]# ps -ef|grep testyy.sh 
root      4284  3792  0 11:01 pts/1    00:00:00 grep --color=auto testyy.sh
[root@localhost ~]# 
####################&后台执行
[root@localhost sub_str]# sh testprc.sh &
[1] 4547
当前进程号  4547
[root@localhost sub_str]# ps -ef|grep testprc.sh 
root      4547  2904  0 11:13 pts/0    00:00:00 sh testprc.sh
root      4559  2904  0 11:13 pts/0    00:00:00 grep --color=auto testprc.sh
[root@localhost sub_str]# 


应用案例,脚本运行的时候生成pid文件,方便以后kill

大部分运行起来的服务都有自己的pid文件,主要保管pid

pid文件一般都是用$$来写,一般i而在/var/run/下面

& 程序或者脚本进入后台运行

[root@localhost sub_str]# cat /var/run/crond.pid
1221
[root@localhost sub_str]# kill `cat /var/run/crond.pid` 相当于
stop
[root@localhost sub_str]# systemctl stop crond 




shell补-变量shell子串

跟子串用法有相似的

tr命令,替换命令

cut 命令 -c 截取命令

##截取
[root@localhost ~]# echo $name
徐先生管理员
[root@localhost ~]# echo $name|cut -c  2-3   ###截取2-3位
先生
###替换
[root@localhost ~]# echo "hello,word" |tr "," "_"
hello_word
[root@localhost ~]# 
###一般用来取文件或者路径
[root@localhost sub_str]# pathss=/root/tmp/sub_str/testprc.sh
[root@localhost sub_str]# echo ${pathss##*/}####取脚本名称;从左边开始阶段匹配'*/'的部分
testprc.sh
[root@localhost sub_str]# 
[root@localhost sub_str]# echo ${pathss%/*}
/root/tmp/sub_str
[root@localhost sub_str]# echo ${pathss%%/*}

[root@localhost sub_str]# 

[root@localhost sub_str]# echo ${pathss%/*} ####取脚本路径从左边开始阶段匹配'*/'的部分
/root/tmp/sub_str
[root@localhost sub_str]# echo ${pathss%%/*}

[root@localhost sub_str]# 
[root@localhost sub_str]# dirname $pathss   ##也有系统函数,但是没子串效率
/root/tmp/sub_str
[root@localhost sub_str]# basename $pathss     ##也有系统函数,但是没子串效率
testprc.sh
[root@localhost sub_str]# 

name="Mrxujbing"		#该变量的值,有索引是从0,1,2,3,4...
${变量}					返回变量值
${#name}				 返回变量长度
${变量:start}				返回变量start数值之后的字符串,且包含start的数字(start值就是索引值)
${变量:start:length}		提取start之后的length限制的字符,例如${name:4:1}
${变量#word}				从变量开头删除最短匹配的word子串
${变量##word}				从变量开头删除最长匹配的word子串
${变量%word}				从变量结尾删除最短匹配的word
${变量%%word}				从变量结尾开始删除最长匹配的word

替换
${变量/pattern/string}	用string 代替第一个匹配的pattern
${变量//pattern/string}	用string 代替所有匹配的pattern

注意:以上用法没改变变量内容;

扩展变量

设置默认值

  • :- 如果变量为空,就返回后面的字符信息,可通过变量接收
  • := 如果变量为空,赋值给变量,并返回其值
  • :?如果变量为空,主动抛出信息,并传入标准错误输出信息
  • :+ 当变量为空什么都不做,否则就返回其值给接收者

注意: ‘:=’改变了变量值

都还是再man bash 下面查parameter里找

shell补-变量变量赋值
  • 直接赋值:oldman=666
  • 引用其他命令结果赋值 ip =hostname -l|awk'{print $2}'
  • 交互式变量赋值:read -s 不显示输入的信息(隐藏) -t设置超时时间 -p指定输出/提shi
  • 脚本传输:shell表示位置参数的特殊变量$1 $2 $3

标签:shell,再见,变量,sh,str,root,localhost,sub
From: https://www.cnblogs.com/xjianbing/p/17902794.html

相关文章

  • shell补-运算-数字运算
    shell补-运算-数字运算RANDOM[root@localhostsub_str]#manbash###/RANDOM.........RANDOMEachtimethisparameterisreferenced,arandomintegerbetween0and32767isgenerated.Thesequenceofrandomnumbersmaybeinitializedbyas......
  • Day05 变量
    Day05变量定义:在程序执行过程中,其值有可能发生改变的量(数据)使用场景:当某个数据经常发生改变时,我们也可以用变量存储。当数据变化时,只要修改变量里面变化的值即可。变量的定义格式数据类型变量名=数据值;(数据值:存在空间里面的数值)(变量名:为空间起的名)(数据类型:为空间......
  • Go语言编程教程3-变量与常量
    课程要点了解Golang中的变量的使用了解Golang中的常量的使用了解变量和常量的可访问性变量定义变量Golang是一门十分简约的语言,它的变量定义与其他主流语言有一定的相似之处,但是却没有像其他语言一样拥有很多可选的修饰符。在Golang的变量定义中,我们只会用到var这一个修......
  • C 语言注释和变量详解
    C语言中的注释C语言中可以使用注释来解释代码并使其更具可读性。它还可以在测试替代代码时防止执行。单行注释单行注释以两个斜杠(//)开头。//和行末之间的任何文本都会被编译器忽略(不会被执行)。此示例在代码行之前使用单行注释://这是一个注释printf("HelloWorld!");......
  • Linux_3.2 Shell语法
    1循环语句1.1for…in…do…done命令格式:forvarinval1val2val3#类似于枚举do语句1语句2...done示例1,输出a2cc,每个元素一行:foriina2ccdoecho$idone示例2,输出当前路径下的所有文件名,每个文件名一行:forfilein`ls`#$(ls)d......
  • SpringBoot中项目启动及定时任务缓存数据库常用数据至内存变量并转换后高频调用
    场景定时任务中需要获取数据库中数据进行数据转换成需要的格式并进行后续的业务处理。数据库中的数据更新频率不高。可将数据库中数据在项目启动后读取一遍数据,然后再通过定时任务定时查询数据库更新数据。实现数据库缓存的方式有多种,比如以下:SpringBoot中通过自定义缓存注解......
  • 九、@Watch装饰器:状态变量更改通知
    @Watch应用对状态变量的监听。如果开发者需要关注某个状态变量的值是否改变,可以使用@Watch为状态变量这种回调函数。@Watch用于监听状态变量的变化,当状态变量变化时,@Watch的回调方法将被调用。@Watch在ArkUI框架内部判断数值有无更新使用的是严格相等(===),遵循严格相等规范。当在严......
  • 03C# 从命令行或环境变量读取配置
    前面几篇文章主要讲解读取Json文件,这篇文章讲解如何通过命令行和环境变量读取配置安装Nuget包:Micosoft.Extensions.Configuration.CommandLine(命令行读取)安装Nuget包:Micosoft.Extensions.Configuration.EnvironmentVariables(环境变量读取)配置命令行参数: 配置环境变量参......
  • 七、变量的定义和引用
    七、变量的定义和引用7.1变量的引用和调试变量的调试在ansible中有一个debug模块,专门用来打印输出调试信息。它只有两个参数msg和var。msg:打印信息,类似于shell的echo和python的printvar:只能打印变量信息-name:installhttpdhosts:allvars:username:......
  • 八、fact变量和魔法变量
    八、fact变量和魔法变量8.1fact简介​ Ansible在执行playbook的时候,第一个任务会自动执行setup模块,该模块用于获取远程主机的系统信息,并将这些信息存储在facts变量中,在playbook中可以随时调用这些变量。我们可以执行adhoc获取一下fact变量,看看都有什么。ansiblenode1-mset......