环境变量
1 环境变量用于所有用户进程(经常称为子进程)登录进程称为父进程。Shell中执行的用户进程均为子进程。不像
本了变量(只用于现在的shell)环境变量可用于所有子进程,这包括编辑器,脚本和应用。
$HOME/.bash_profile(/etc/profile)
export 显示环境变量
env 显示环境变量
export text="变量" (设置环境变量)
2.1.3
变量的值替换它的名字。
用变量的值替换它的名字
echo
在变量名前加$,使用echo命令可以显示单个变量取值。
例:
test="this is test"
echo $test
this is test
${varialbe} 显示实际值到variable
${variable:+value} 如果设置了vaiable 则显示其值value,否则为空
${variable:?value} 如果未设置vaiable 显示用户定义错误信息vales
${variable:-value} 如果未设置vaiable则显示其值value
${variable:=varlue} 如果未设置vaiable,设置其值,并显示
清除变量名
unset
例: test="aaa"
unset test
向系统传递参数
例:
vi find.sh
添加内容:
#!/bin/bash
find /home/ -name $1 -print
执行:
./find.sh aa.txt
2.1.6标准变量
bash 默认建立一些标准环境变量,可在
/etc/profiles中定义。
.EXINIT
.HOME
.IFS
.LOGNAME
.MAIL
.MAILCHECK
.MAILPATH
.TERM //进去后终端的类型
.PATH //可执行文件找的路径
.TZ //表示时区
.PS1 //表示登系统的提示符
.MANPATH //MAN文档存放
.TERMINFO //TERM的信息
2.17 特殊变量
$# (传递到脚本的参数列表)
$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,
此选项参数可超过9个
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的进程ID号
$@ 与$#相同,但是使用时加引号,并在引号中返回每个参数
$- 显示SHELL使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态。0表示没有错误,期它任何值表明有错 误)
2.1.8 影响变量的命令
.declare
-设置或显示变量
- -f只显示函数名
- -r 创建只读变量(declare 和 typeset )
- -i 创建转出变量
- 使用+替代-,可以颠倒选项的含义
.export
-用于创建传给予shell的变量
- --表明选项结束,所有后续参数都是实参
- -f 表明在“名一值”对中的名字是函数名。
- -n 把全局变量转换成局部变量。
换句话说,命令的变量不再传给shell
- -p显示全局变量列表
.readonly
-用于显示或设置只读变量
- -f 创建只读变量
.set
- 设置或重设各种shell
.shift [n]
-用于移动位置变量,调整位置变量,使$3 的值赋予$2,$2的值赋于 $1
.typeset
- 用于显示或设置变量
- 是declare的同义词
.unset
-用于取消变量的定义
- --表明项选结束
- -f 删除只读变量,但不能取消从shell环境中删除指定的变量和函数。如PATH , PS1,PS2,PPID,UID,EUID等的设置
2.2 引号
双引号:
使用双引号可引用除字符$L' \外的任意字符串.
echo -e "ert , *shell '\n* china'echo itlab'"
单引号:
单引号与双引号类似,不同的是SHELL会忽略任何引用值,换句话说,如果屏蔽了其特殊含义,会将引号里的所有字符,包括引号都作为一个字符串。
echo 'ert,$SHELL* china'echo italb''
反引号:
反引号用于设置系统命令的输出到变量。shell将反引号的内容作为一个系统命令,并执行其内容
echo "china `echo itable`"
结果: itable
反斜杠:
如果一个字符有特殊含义,反斜线防止shell误解其含义即屏蔽其特殊含义。
下述字符包含有特殊意义: & * + ^ $ ` " | ?
例: echo \*
结果:
2.2 运算符
.运算符是对计算机发的指令.
运算对象
-数字,字符(字面值)
-变量
-表达式
.表达式:运算符和运算对象的组全体。
运算符类型
.按位运算
~,<<,>>,$,|,^
.$[]表示形式告诉SHELL对方括号中的表达式求值
- $[2+8]
例:
#!/bin/bash
#$[]表示形式举例
echo $[2+8]
~ 反运算
.op1< .op1>>op2 与上相反
.op1&op2 与比较运算符,op1和op2对应位,对于每个二进位来说,如果二者该位都是1则结果位1,否则结果位为0,
.op1~op2 异或运算,比较op1和op2 的对应位,对于每个二进制位来说,如果二者该位互补则结果为1;否则,结果为0.
op1| op2 或运算比较op1和op2的对应位,对于每个二进位来说,如果二者该位有一个是1或都是1,则结果位为1否则结果为0
逻辑运算符
&& 与运算符
|| 或运算
>,==,<,!= 大于,等于,小于,不等行
3.11 echo
echo 命令可以显示文本行或变量,或者把字符串输入到文件
echo [option]string
- -e 解析转义字符
- -n不换行,linux系统默认回车换行
- -转义符(\c,\f,\t,\n)
\c:回车不换行
\f:竟止
\t:跳过相当于table键
\n:回车换行
3.2.1 read
read 语句可以从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。
.read varible1 varible2 ...
-如果只指定一个变量,那么read将会把所有的输入赋给该变量,直到遇到第一文件结束等或回车;如果给出了多个变量,它们按顺序分别被赋予不同的变量。shell将用空格作为变量之间的分隔符.
3.3.1 cat
cat 是一个简单而通用的命令,可以有它来显示文件内容,创建文件,还可以用它来显示控制字符。
cat [options] filename1...filename2..
-v 显示控制字符
-使用cat命令时要注意,它不会在文件分页符处停下来;它会一下显示完整个文件。如果希望每次显示一页,可以使用more命令或把cat命令的输出通过管道传递到另外一个具有分页功能的命令(more,less)中
-man cat
3.5 tee
tee 命令把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。
tree
-如果希望在看到输出的同时,也将其存入一个文件挪用么这个命令合适不过了
sort 排序
例:
cat /etc/passwd | sort | awk '{print$1}'
这样就可以查看第一列的用户名了
结合使用标准输出和标准错误
cat aa.txt bb.txt >cc.txt 2>error.txt
意思是将aa.txt 和bb.txt 内容合并放到cc.txt 如果出错就将错误码信息发到error.txt中
合并标准输出和标准错误
合并标准输出和标准错误的时候,切记shell是从左至右分析相应的命令
grep "standard" standard.txt>grep.out 2>&1 &1表示输出到屏幕
exec 命令可以用来替代当前shell;换句话说,并没有启动shell使用这个一命令时任何现有环境都将会被清除,并重新启动一个shell。
exec command
其中的command通常是一个shell脚本。
对文件描述符进行操作的时候(也只有在这时),它不会覆盖你的当前的 shell
#!/bin/bash
#file_desc
exec 3<&0 0 read line1
read line2
read line3
exec $line1
exec $line2
exec $line3
阅读(693) | 评论(0) | 转发(0) |