shell 学习
一.变量设置
1.本地变量设置: 变量名=变量值
localtest=test 设置本地变量
echo $localtest 打印本地变量
set 查看本地变量
注:本地变量只对shell当前生命周期有效,退出重新登陆后失效
2.环境变量:可以应用于所有用户进程
$HOME/.bash_profile(/etc/profile)
设置方法:
export chinaitlab=shenzhen 设置环境变量
env(export) 查看环境变量
3.变量替换
echo $变量名
4.变量清除(只读变量无法清除,请谨慎使用)
unset 变量名
5.标准变量(基本都是环境变量,可以/etc/profile中定义)
EXINIT
HOME
IFS LINUX域之间的分隔符
LOGNAME 登陆名
MAIL 当前用户邮箱存储位置
MAILCHECK 检查邮件时间间隔
MAILPATH
TEAM 终端类型
PATH 可执行文件检索路径
TZ 时区
PS1 SHELL登陆提示符
PS2 在一行上面运行多个命令时使用
PWD 表示当前目录
SHELL 当前运行的SHELL版本
MANPATH 帮助文件路径
TERMINFO
6.特殊变量
$# 传递到脚本的参数列表
$* 以一个单子符串显示所有脚本传递参数,与位置变量不同,此选项参数可超过9个
$$ 脚本运行的当有进程ID号
$! 后台运行的最后一个进程的进程ID号
$@ 与$#相同,但是在使用时加引号,并在引号中返回每个参数
$- 显示shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态,0表示没有错误,其它的任何值都表明有错误
7.影响变量的命令
decare: 设置或显示变量
-f 显示函数名
-r 创建只读变量(declare和typeset)
-x 创建转出变量
-i 创建整数变量
使用+或- 可以颠倒选项的含义(-r是不可颠倒的)
export 创建传给子shell的变量
--表示选项结束,所有后续参数都是实参
-f 表示在"名-值"对中的名字是函数名。
-n 把全局变量转换成局部变量。
-p 显示全局变量列表
readonly 用于显示或设置只读变量
-- 表示选项结束
-f 创建只读变量
set 设置或重设各种shell变量
shift [n] 用于移动变量位置,调整位置变量,使$3的值赋于$2, $2的值赋于$1
typeset 用于显示或设置变量 是declare的同义词
unset 用于取消变量的定义
-- 表示选项结束
-f 删除只读变量,但不能取消从shell环境中删除指定的变量和函数。如:PATH,PS1,PS2,PPID,UID,EUID等的设置。
8.引号
1.双引号
引用双号号可以引用除字符$、`、\外的任意字符或字符串
2.单引号
与双引号类型不同的是忽略所有特殊符号
3.反引号
把字符串当作系统命令来执行
4.反斜杠
如是本个字符串有特殊含义,则屏蔽其特殊含义(如:*、+、……、$、`、“、|、?)
9.运算符
运算符是对计算机发的指令
按位运算(~、〈〈、>>、&、^、|)
~ 反运算符 把二进制中的1变为0,0变为1
〈〈左移位运算符
如:op1<<op2(echo $[2<<4] 结果为32)
把OP1中的二进制向左移OP2位,忽略最左端移出的各位,最右端的各位补上0值,每做一次按位左移就有实现op1乘以2
>> 右移位运算符
op1>>op2(echo $[16>>2] 结果为4) 把OP1中的二进制向右移OP2位,忽略最右端移出的各位,最左端的各位补上0值,每做一次按位左移就有实现op1除以2
& 与比较运算符
op1&op2 (echo $[4&6] 结果为4) op1和op2对应位,对于每个二进制来说,如果二都该位都是1,则结果为1,否则结果为0
^ 异或运算符
op1^op2 (echo $[2^4] 结果为6 ecch $[4^6] 结果为2) 比较op1与op2的对应位,如果二者该位互补,则结果为1;否则为0
| 或运算符
op1|op2 (echo $[2|4] 结果为6 echo $[2|2] 结果为2) 比较op1与op2对应位,如果二者该位有一个是1或都是1,则结果为1,否则为0
通过$[]求值,表示方括号中表达式求值
逻辑运算符:
0&&0 0
0&&1 0
1&&0 0
1&&1 1
0||0 0
0||1 1
1||0 1
1||1 1
赋值运算符
= += -= *+ /= %= &= ^= |= <<= >>=
let count =$count + $change
let count+=$change
example: var=65
let var+=4
echo $var
69
let var=var+10
echo $var
79
表达式替换
$[]和$( () )
习惯使用$[],所有shell的求值都是用整数完成
$[]可以接受不同基数的数字
[base#n] n表示基数从2到36的任何基数
echo $[10#8+1]
9
运算符优先级(见图)
二、shell的输入与输出
1.echo
显示文本行或变量
echo [option] string
-e 解析转义字符
-n 回车不换行,linux系统默认回车换行
-转义符(\c \f \t \n)
example:
#!/bin/bash
#echod
echo -e "This echo's 3 new lines\n\n\n"
echo "OK"
echo
echo "This echo's 3 new lines\n\n\n"
echo "The log files have all been done"> mylogfile.txt
结果:
This echo's 3 new lines
OK
This echo's 3 new lines\n\n\n
2.read 语句可以从键盘或文件的某一行文本中读入信息,并将其同仁给一个变量。
read varible1 varible2
-如果只指定了一个变量,那么read将会把所有的输入赋给该变量,直到遇到第一个文件结束符或回车;如果输出多个变量,它们按顺序分别被赋予不同的变量。shell将用空格作为变量之间的分隔符
example:
#!/bin /bash
#readname
echo -n "First Name:"
read firstname
echo "Last Name"
read lastname
echo -e "Your First Name is :${firstname}\n"
echo -e "Your Last Name is :{lastname}\n"
3. cat显示文件内容,创建文件,可以用它来显示控制字符
cat[option] filename1 filename2 ....
-v 显示控制字符
不分页显示
4.|管道 把一个命令的输出作为另一个命令的输入
df -k|awk '{print $1}'|grep -v "Filesystem"
结果:
/dev/sda1
/dev/sda2
none
5. tee 把输出的一个副本输送到标准输出,另一个副本拷贝到另一个文件
-a 追加到文件末尾
example
who|tee who.cut
who|tee -a who.cut
6.标准输入。输出和错误
标准输入描述符:0(缺省是键盘也可以文件和其它命令)
标准输出描述符:1(缺省是屏幕也可以是文件)
错误文件描述符2 (缺省是屏幕,也可以是文件)
有12个描述符,3-9可以任意使用
7.文件重定向 改变程序运行的输入来源和输入地点
转载于:https://blog.51cto.com/ryan0817/520591