shell基础及变量
shell概述
-
Shell的作用 —— 命令解释器,“翻译官”
-
Shell的分类
- Bourne Shell:从1979起Unix就开始使用,Bourne Shell的主文件
名为sh。 - C Shell: C Shell主要在BSD版的Unix系统中使用,其语法和C语言
相类似而得名。
- Bourne Shell:从1979起Unix就开始使用,Bourne Shell的主文件
-
Shell的两种主要语法类型有Bourne和C,这两种语法彼此
不兼容。- Bash: Bash与sh兼容,现在使用的Linux就是使用Bash
作为用户的基本Shell。 其属于Bourne家族。
- Bash: Bash与sh兼容,现在使用的Linux就是使用Bash
shell基础
命令与文件补全
tab键(一次):补全名称
tab键(两次):显示所有相似名称
命令别名
alias 别名=‘原命令’
- 注意等号两边不能有空格
- alias的作用仅在该次登入的操作,即输入一次alias后,这个修改只在当前的Shell生效。如果重新开启一个 Shell,或者重新登录,则这些alias将无法使用。好在linux中提供alias永久化的方法:
- 若要每次登入就自动生效别名,则把别名加在/etc/profile或~/.bashrc中。然后# source ~/.bashrc
- 若要让每一位用户都生效别名,则把别名加在/etc/bashrc最后面,然后# source /etc/bashrc
删除别名
unalias 别名
多命令顺序执行
- ; 命令1;命令2
- 多个命令顺序执行,命令之间没有任何逻辑关系
- && 命令1&&命令2
- 当命令1正确执行时,命令2才会执行;否则,命令2不执行
- || 命令1||命令2
- 当命令1执行错误时,命令2才会执行;否则,命令2不会执行
管道符
命令1 | 命令2
- 命令1的正确输出作为命令2的操作对象
tee
- 数据流的处理过程中将某段信息存下来
- tee [-a] filename
- -a :以累加 (append) 的方式,将数据加入 file 中
- ls -l / | tee -a ~/homefile | more
- -a :以累加 (append) 的方式,将数据加入 file 中
echo
- echo [选项] [输出内容]
- 选项
- -e : 支持反斜线控制的字符转换
-输出内容 - \a 发出警告声;
- \b 删除前一个字符;
- \c 最后不加上换行符号;
- \f 换行但光标仍旧停留在原来的位置;
- \n 换行且光标移至行首;
- \r 光标移至行首,但不换行;
- \t 插入tab;
- \v 与\f相同;
- \ 插入\字符;
- \nnn 插入nnn(八进制)所代表的ASCII字符;
- -e : 支持反斜线控制的字符转换
shell脚本
Shell脚本的基本元素
常见运行Shell脚本方法
- 方法一 :
sh ./datewho.sh - 方法二:
-chmod +x datewho.sh
./datewho.sh
shell中的变量和符号
变量
变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是“2name”则是错误的。变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型。
变量分类
- 本地变量(用户变量) 局部变量只在创建它们的Shell中使用,可以在shell程序内任意使用和修改它们。
- 环境变量 可以在创建它们的Shell及其派生出来的任意子程序中使用。有些变量是用户创建的,其他的则是专用的(比如PATH、HOME)。是系统环境的一部分,不必去定义它们,可以在shell程序中使用它们 。还能在shell中加以修改。
- 内部变量 由系统提供的。与环境变量不同,但用户不能修改它们。
本地变量
变量名=值
注意:
- 等号两边不可以有空格
- 取值包含空格,必须用双引号括起来
- Shell变量可以用大小写字母,区分大小写
- 变量是弱类型的(不用声明类型)
- 变量的引用
- $变量名
- ${变量名}(建议使用)
echo显示输出
echo [-ne][字符串] / echo [–help][–version]
- -n 不要在最后自动换行
- -e 打开反斜杠ESC转义。若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
- \t 插入tab;
- \ 插入\字符;
- -help 显示帮助
- -version 显示版本信息
清除变量
unset 变量
环境变量
- 可以在命令行中设置,但用户注销时这些值将丢失
- 环境变量均为大写
- 必须用export命令导出
- 设置环境变量
- variable-name=value
- export variable-name(环境变量名大写)
- 显示环境变量
- env 可以看到所有的环境变量
- echo $环境变量名 (显示一个变量)
- 清除环境变量
- unset 环境变量名
- 让环境变量的修改在退出shell再次登录时仍有效,需要在相
关配置文件中修改,Bash的初始化文件有:/etc/profile、/.bash_profile、/.bash_login、/.profile、/.bashrc、/etc/bashrc(不论更改那个文件,都要source 文件名)
内部变量
内部变量是Linux所提供的一种特殊类型的变量,这类变量在程序中用来作出判断。在shell程序内这类变量的值是不能修改的。
- $# ——传送给shell程序的位置参数的数量
- $?——最后命令的完成码或者在shell程序内部执行的shell程序(返回值)。0表示没有错误,其他任何值表明有错误。
- $0——shell程序的名称
- $@——调用shell程序时所传送的全部参数的单字符串,“参数1”“参数2”…形式保存的参数
- $* “参数1 参数2”…形式保存的参数
- $n 第n个参数
- $$ ($!)本程序的PID
shell中的特殊字符
- 注释符#
- 除了#!/bin/bash里的#特殊
- 美元符 $
- 变量符。与反斜杠转义符相反,使其后的普通字符作为变量名,如$a表示变量a的值。变量字符长度超过1个时,用{}括起来
- 单引号
- 被引起的字符全部做普通字符,即全部原样
- 双引号
- 引号内的内容,除$、转义符\、倒引号`这三个保留特殊功能,其它字符均做普通字符。
- 倒引号(数字1键旁边的那个键)
- 引号内的字符串当做shell命令行解释执行,得到的结果取代整个倒引号括起来的部分。
- 反斜线
- 反斜线是转义字符,它能把特殊字符变成普通字符。在某个字符前面利用反斜杠(\)能够阻止shell把后面的字符解释为特殊字符。
- 获取字符串长度
- string=“abcd”
- echo ${#string} #输出 4
- 提取子字符串
- 从字符串第 2 个字符开始截取 4 个字符
- string=“runoob is a great site”
- echo ${string:1:4} # 输出 unoo
- 从字符串第 2 个字符开始截取 4 个字符