携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第31天,点击查看活动详情
Shell特殊变量
变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量
特殊变量列表
| 变量 | 含义 |
|---|---|
| $0 | 当前脚本的文件名s |
| $n | 传递给脚本或函数的参数.n 是一个数字,表示第几个参数 |
| $# | 传递给脚本或函数的参数个数. |
| $* | 传递给脚本或函数的所有参数. |
| $@ | 传递给脚本或函数的所有参数.被双引号(" ")包含时,与 $* 稍有不同 |
| $? | 上个命令的退出状态,或函数的返回值. |
| $$ | 当前Shell进程ID.对于 Shell 脚本,就是这些脚本所在的进程ID. |
- 实例
vim 3.sh #!/bin/bash echo "文件名是: $0" echo "第1个参数是: $1" echo "第2个参数是: $2" echo "所有的参数是: $@" echo "所有的参数是: $*" echo "参数的数量为: $#" [llllljian@llllljian-virtual-machine 20180524]$ bash ./3.sh a b c d e 文件名是: ./3.sh 第1个参数是: a 第2个参数是: b 所有的参数是: a b c d e 所有的参数是: a b c d e 参数的数量为: 5vim 1.sh #!/bin/bash for var in "$*" do echo "$var" echo "------------------------" done echo "========================" for var in "$@" do echo "$var" echo "------------------------" done ./1.sh "a" "b" "c" "d" a b c d ------------------------ ======================== a ------------------------ b ------------------------ c ------------------------ d ------------------------
学习BASH
我的理解是 bash与shell的关系类似于ubuntu与Linux的关系,都是后者的一部分
bash功能
- 记录历史命令:bash可以记录曾经的命令,保持在~/.bash_history文件中,只保存上次注销登录之后的命令
- tab键自动补全:使用tab见可以自动不全命令或者目录i
- alias命令别名:可以使用alias ll='ls -al'来设置命令的别名
- 工作控制:可以将某些任务放在后台去运行,这里不多种介绍
- 程序脚本:可以执行shell脚本文件
- 通配符:在查找相关文件或者执行相关命令时,可以使用通配符*
- 内建命令type:可以使用type 命令来查看某个命令是否为内建在bash当中的命令
type查询指令是否为bash shell的内建命令
- type
- 命令格式
- type(选项)(参数)
- 命令功能
- 显示指定命令的类型,判断给出的指令是内部指令还是外部指令
- 命令参数
- -t: 输出“file”、“alias”或者“builtin”,分别表示给定的指令为“外部指令”,“命令别名”或者“内部指令”;
- -p: 如果给出的指令为外部指令,则显示其绝对路径;
- -a: 在环境变量“PATH”指定的路径中,显示给定指令的信息,包括命令别名.
- 命令格式
指令的下达与快速编辑按钮
- \
- 命令太长\ Enter可以跳到下一行
- ctrl+u
- 删除光标之前的指令串
- ctrl+k
- 删除光标之后的指令串
- ctrl+a
- 让光标移动到整个指令串的最前面
- ctrl+e
- 让光标移动到整个命令串的最后面
shell的变量功能
- 环境变量[全局变量]
- export 变量名=变量值
- 在子程序中仍然有效[当前bash我们称之为父程序,在整个bash下执行的任何程序都成为子程序]
- 自定义变量[局部变量]
- 变量名=变量值
- 局部变量只在当前程序中有效
- 实例
name1=llllljian1 export name2=llllljian2 vim 1.sh echo $name1 echo $name2 ./1.sh kong llllljian2ss - 变量设定规则
- 变量与内容以一个等号 [=] 来连接,
- 等号两边不能直接空格符,如下所示为错误:
- 量名称只能是英文字母与数字,但是开头字符不能是数字,
- 变量内容若有空格符可使用双引号["]或单引号[']将变量内容结合起来,但双引号内的特殊字符如$等,可以保有原来的特性,单引号内的特殊字符则仅为一般字符(纯文本),如下所示:
- 可用跳脱字符[ \ ]将特殊符号(如 [Enter],$,,空格符,'等)变成一般字符
- 在一串指令的执行中,还需要籍由其他额外的指令提供的信息时,可以使用反单引号[
指令]或[$(指令)]. - 若该变量为扩增变量内容时,则可用 “{变量} 累加内容
- 若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量:
- 通常大写字符为系统默认变量,自行设定变量可以使用小写字符,方便判断(纯粹依照使用者兴趣与嗜好);
- 取消变量的方法为使用 unset : [uset 变量名称]
- 定义变量
- 定义变量时,变量名不加美元符号($)
- 需要遵守的规则
- 首个字符必须为字母(a-z,A-Z).
- 中间不能有空格,可以使用下划线(_).
- 不能使用标点符号.
- 不能使用bash里的关键字(可用help命令查看保留关键字).
- 使用变量
- 使用一个定义过的变量,只要在变量名前面加美元符号($)即可
- 推荐变量左右加上花括号,便于查看
- 重新定义变量
- 已定义的变量,可以被重新定义
myUrl="http://see.xidian.edu.cn/cpp/linux/" echo ${myUrl} myUrl="http://see.xidian.edu.cn/cpp/shell/" echo ${myUrl} - 只读变量
- 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变
- 删除变量
- 使用 unset 命令可以删除变量
- 变量类型
- 局部变量
- 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量.
- 环境变量
- 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行.必要的时候shell脚本也可以定义环境变量.
- shell变量
- shell变量是由shell程序设置的特殊变量.shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
- 局部变量