一.Shell中的变量
1.变量的定义规则
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线 _。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
- 环境变量建议大写,便于区分
2.bash中的引号
- 双引号"" :会把引号的内容当成整体来看待,允许通过$符号引用其他变量值。
- 单引号’’ :会把引号的内容当成整体来看待,禁止引用其他变量值,shell中特殊符号都被视为普通字符
- 反撇号`` :反撇号和$()一样,引号或括号里的命令会优先执行,如果存在嵌套,反撇号不能用
[root@server ~]
server
[root@server ~]
$(hostname)
[root@server ~]
2022-04-12
[root@server ~]
2022-04-12
3.自定义变量
自定义变量是由系统用户自己定义的变量,只在用户自己的 Shell 环境中有效,因此又称为本地变量。
yourname="laowang"
echo $yourname
echo ${yourname}
unset yourname
4.特殊的Shell变量
☆环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。
env
set
export
export a=1
vim ~/.bash_profile
export a=1
source ~/.bash_profile
vim /etc/profile
export a=2
source /etc/profile
用户登录系统读取相关文件的顺序:
/etc/profile——>$HOME/.bash_profile——>$HOME/.bashrc
——>/etc/bashrc——>$HOME/.bash_logout
- PATH变量用于设置可执行程序的默认搜索路径,当仅指定文件名称来执行命令程序时,Linux 系统将在 PATH 变量指定的目录范围查找对应的可执行文件,如果找不到则会提示“command not found”。
- 若希望能直接通过文件名称来运行脚本,可以 修改 PATH 变量(/etc/profile,$HOME/.bash_profile) 以添加搜索路径。
☆系统变量(内置bash中变量)
系统变量 | 说明 |
---|
$$ | 当前所在进程的进程号 | $! | 后台运行的最后一个进程号 | $? | 上一条命令执行后的返回值,当返回值为0时表示执行正常,非0值表示执行异常 | $* | 脚本后面所有参数,参数当成一个整体输出,每一个变量参数之间以空格隔开 | $@ | 脚本后面所有参数,参数是独立的 | $# | 脚本后面接的参数的个数 | $0 | 当前执行的进程/程序名 | $1~$9 | 位置参数变量 | ${10}~${n} | 扩展位置参数变量 第10个位置变量必须用{}大括号括起来 |
☆只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
#!/bin/bash
myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.baidu.com"
/bin/sh: NAME: This variable is read only.
二.脚本的传参
1.非交互式传参
运行脚本时,直接在后面跟参数,多个参数以空格隔开。
[root@server ~]
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
[root@server ~]
[root@server ~]
执行的文件名:./para.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
2.交互式传参
read [选项][变量名]
-a:后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认以空格为分割符。
-p:“提示信息”:在等待read输入时,输出提示信息
-t:秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间
-n:数字:read命令只接受指定的字符数,就会执行
-s:隐藏输入的数据,适用于机密信息的输入
可以自定义,如果不指定变量名,会把输入保存入默认变量REPLY.
案例:
#!/bin/bash
read -t 30 -p "Please input your name: " name
echo "Name is $name"
read -s -t 30 -p "Please enter your passwd: " passwd
echo -e "\n"
echo "Your passwd is $passwd"
read -n 1 -t 30 -p "Please select your gender[M/F]:" gender
echo -e "\n"
echo "Sex is $gender"
三.命令的别名设定
alias xie='vim'
vim ~/.bashrc
alias xie='vim'
vim /etc/bashrc
alias xie='vim'
unalias xie
四.数组
array[0]=v1
array[1]=v2
array[2]=v3
array=(var1 var2 var3 var4)
array1=(`cat /etc/passwd`)
array2=(`ls /root`)
echo ${array[i]}
echo ${array[*]}
echo ${#array[*]}
echo ${!array[@]}
echo ${array[@]:1:2}
五.简单的四则运算
Bash shell 的算术运算有四种方式:
$((1+1))
$[1+1]
expr 3 \* 3
let i++
echo 1+1.5|bc
|