bash的特殊符号、变量和运算符

bash的特殊符号、变量和运算符Bash 中其他特殊符号
单引号&双引号
#name=qyy    #给变量name赋值,值为:qyy
#echo $name
qyy
#echo "$name"
qyy
#echo '$name'
$name小龙女的秘密
反引号 & $()
# echo `date`
Wed Apr 29 03:48:46 EDT 2020      #两者的意思是⼀样的
# echo $(date)
Wed Apr 29 03:49:48 EDT 2020
⼩括号、中括号、⼤括号
强调事项:
()执⾏⼀串命令时,需要重新开⼀个⼦shell进⾏执⾏
{}执⾏⼀串命令时,是在当前shell执⾏
()和{}都是把⼀串的命令放在括号⾥⾯,并且命令之间⽤;号隔开
()最后⼀个命令可以不⽤分号结尾
{}最后⼀个命令要⽤分号结尾
{}的第⼀个命令和左括号之间必须要有⼀个空格
()⾥的各命令不必和括号有空格
操作验证:
() 中执⾏命令时,新开启shell 进⾏,不覆盖原来的
# name=dongxu
# echo $name
dongxu
# (name=laow;echo $name)
laow视觉点胶系统
# echo $name
dongxu
{ } 执⾏命令时,就在本shell中进⾏,覆盖掉原有的
# { name=laoq;echo $name; }
laoq
# echo $name
laoq
xiazhai
Bash 的变量和运算符
定义变量的规范
变量是计算机语⾔中能储存计算结果或表⽰指抽象概念,变量可以通过变量名访问,在指令式语⾔中,变量即可变化的量。
注:变量名称可以由字母、数字和下划线组成,但是不能以数字开头,变量中间不能有空格。变量不能以数字开头# 2name=dongxu -bash: 2name=dongxu: command not found 在Bash 中,变量的默认类型都是字符串型,若要进⾏数值运算,必须修改变量类型为数值型。# x=455# y=700# s=$x+$y # echo $s 455+700
在赋予变量是等号两边不能有空格
# name= shangxue
毫米波天线
-bash: shangxue: command not found
# name =shangxue -bash: name: command not found 注:变量的值如果有空格,需要使⽤单引号或双引号包括。如:name="hello world"。其中双引号内的符号"$"、“\”和反引号都拥有特殊含义,⽽单引号括起来的内容都是普通字符变量叠加如果需要增加变量的值,那么可以进⾏变量值的叠加。格式:变量名= “{变量名} 新增值”注意:因为是在原变量值的基础增加内容,多数会⽤到空格,那么必须⽤双引号才可以# echo $name laoq
# name="$name laow"
# echo $name
laoq laow
# name="${name} laot"# echo $name laoq laow laot
如果是把命令的结果作为变量值赋予变量,则需要使⽤反引号或$()包含命令。
# time=`date`
# echo $time
Wed Apr 29 05:19:19 EDT 2020
# dir=$(ls)
# echo $dir
anaconda -ks .cfg hello .sh
变量的分类
⾃定义变量:这种变量是最常见的变量,由⽤户⾃由定义变量名和变量的值。
环境变量:这种变量中主要保存的是和系统操作环境相关的数据,⽐如当前登录⽤户,⽤户的家⽬录,命令的提⽰符等。环境变量的变量名可以⾃由定义,但是⼀般对系统起作⽤的环境变量的变量名是系统预先设定好的。⽐如:PAHT
位置参数变量:这种变量主要是⽤来向脚本当中传递参数或数据的,变量名不能⾃定义,变量作⽤是固定的。⽐如:
⽤户⾃定义变量
注意:切记变量的命名规范!(空格、名称、引号等)
1) 变量调⽤
echo  $变量名
# echo $name
laoq laow laot
变量名新增值"或变量名="n 预定义变量:是Bash 中已经定义好的变量,变量名不能⾃定义,变量作⽤也是固定的。⽐如:
2) 变量查看
set [选项] #开启针对变量的某些特定功能
-u :调⽤没有声明的变量时会报错
+u :关闭
# echo $xxx
# set -u
# echo $xxx
-bash: xxx: unbound variable
-x :命令执⾏前,会先把命令输出⼀次
# set -x
# echo $name
+echo laoq laow laot
laoq laow laot
3) 变量删除
unset 变量名
摩擦片
环境变量
注:我们很少⾃⾏定义环境变量,⼀般都是对系统设置好的进⾏修改
1) 环境变量设置
export  AGE=18
#export 声明的是环境变量
2) 环境变量查询和删除
env命令和set命令的区别:set命令查看所有变量,env命令只能查看环境变量。
# set | grep NAME
HOSTNAME=localhost.localdomain
LOGNAME=root
统一登录NAME=laow
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
# set | grep AGE
AGE=18
# env | grep NAME
HOSTNAME=localhost.localdomain
LOGNAME=root
# env | grep AGE
AGE=18
3) 系统默认的环境变量(PATH、PS1、LANG)
PATH变量:系统命令存放路径
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
说明:PATH变量的值是⽤“:”分割的路径,这些路径就是系统查命令的路径。也就是说当我们输⼊了⼀个命令时,命令没有设置别名,并且也没有写命令的相对或绝对路径时,系统就会到PATH变量定义的路径中去寻,是否有可以执⾏的程序。如果到则执⾏,否则会报“命令没有发现”的错误。
让脚本像执⾏命令⼀样简单
⽅法⼀:可以考虑把⾃⼰写的脚本放⼊PATH对应的⽬录内
⽅法⼆:修改PATH变量的值,将我们存放脚本的⽬录叠加到PATH变量中
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
# PATH="$PATH:/sh"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/sh
注意:以上操作仅仅临时⽣效,重启后则失效,要实现永久⽣效需要写⼊配置⽂件才⾏
单⽤户⽣效:~/.bash_profile
所有⽤户⽣效:/etc/profile
PS1变量:命令提⽰符设置
PS1是⽤来定义命令⾏的提⽰符的,可以按照我们⾃⼰的需求来定义提⽰符。
可⽤选项:
\d:显⽰⽇期,格式为“星期⽉⽇”
\H:显⽰完整的主机名。如默认主机名“localhost.localdomain”
\h:显⽰简写主机名。如默认主机名“localhost”
\t:显⽰24⼩时制时间,格式为“HH:MM:SS”
\T:显⽰12⼩时制时间,格式为“HH:MM:SS”
\A:显⽰24⼩时制时间,格式为“HH:MM”
\@:显⽰12⼩时制时间,格式为“HH:MM am/pm”
\u:显⽰当前⽤户名
\v:显⽰Bash的版本信息
\w:显⽰当前所在⽬录的完整名称
\W:显⽰当前所在⽬录的最后⼀个⽬录
\#:执⾏的第⼏个命令
\$:提⽰符。如果是root提⽰符为“#”,如果是普通⽤户提⽰符为“$”
PS1的默认格式:
定义PS1变量值时需要注意单引号,否则不⽣效
修改格式
LANG变量:系统语系变量
LANG定义的是Linux 的语⾔环境变量:
#echo $LANG
en_US.UTF-8
Linux安装时,选择的是中⽂安装,所以默认的主语系变量是“zh_CN.UTF-8”。Linux中到底⽀持多少语系呢?我们可以使⽤以下命令查询:
# localectl list-locales | tail -5
zh_TW.euctw
zh_TW.utf8
zu_ZA
zu_ZA.iso88591
zu_ZA.utf8
永久修改操作系统语⾔环境
# cat /f
LANG="zh_CN.UTF-8"
# localectl set-locale LANG=en_US.utf8      #该命令直接修改配置⽂件
注意:LANG变量的值会随着登录终端是否⽀持中⽂⽽改变。
$N 位置参数变量:通过位置进⾏变量赋值和取值
#cat xx.sh
#!/bin/bash
echo $0
echo$1
echo $3
echo $4
#chmod +x xx.sh
#./xx.sh avs sdf der get
./xx.sh
avs
der                #其中只有第⼆个没有显⽰
get
∗和
@区分、$#参数的讲解
#cat a.sh
o "Number of values:$#"
#统计⼀共有多少个字符串(值的个数)。
n=1
for i in "$@"
#此处在通过$*或者$@向脚本内传递值的时候,必须使⽤""才有效果~!do
echo"Value of position $n:$i"
#按照对应位置将对应值打印出来。
let n=n+1
#⽤来定位第n个位置,实现⾃动累加。
done
#chmod +x a.sh
#./a.sh a1 a2 a3 a4 a5 a6 a7 a8
.
/a.sh: line 1: o: command not found
Value of position 1:a1
Value of position 2:a2
Value of position 3:a3
Value of position 4:a4    #当是$@时是⼀个⼀个的输出
Value of position 5:a5
Value of position 6:a6
Value of position 7:a7
Value of position 8:a8
#cat a.sh
o "Number of values:$#"
#统计⼀共有多少个字符串(值的个数)。
n=1
for i in "$*"#注意智⼒的变化
#此处在通过$*或者$@向脚本内传递值的时候,必须使⽤""才有效果~!do
echo"Value of position $n:$i"
#按照对应位置将对应值打印出来。
let n=n+1
#⽤来定位第n个位置,实现⾃动累加。
done
#./a.sh a1 a2 a3 a4 a5 a6 a7 a8
./a.sh: line 1: o: command not found
Value of position 1:a1 a2 a3 a4 a5 a6 a7 a8    #当是$*时是整体输出⼀些⼩的脚本操作:
脚本1:实现算法的加减乘除

本文发布于:2024-09-21 19:39:16,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/257969.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:变量   命令   变量名   定义   系统   不能   位置   环境变量
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议