linux 与 shell 以及shell的使用(一)

什么是 shell :
1,shell 是一种工具 也可以理解为一种软件,用来解释命令的,有 sh(没有提示,很原始的一种) csh(由c语言编写) bash(支持命令补全,路径补全) 等等
2,现如今linux常用的 shell工具指的是 bash工具
3,Shell的作用是解释执行用户的命令,交互式shell指的是 用户输入一条命令 shell就解释一条
4,我们还可以事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令,之中称之为批处理
5,在Linux系统上/bin/sh 是指向/bin/bash的符号链接

linux命令:
1,linux 有内建命令(shell进程之中)与 系统命令,内建命令,两者都属于 shell命令
2,内建命令是比较简单的linux系统命令,系统命令是程序量程序量很大的命令,但是是通过 shell程序来进行加载的
3,在linux 之中 执行 一个linux 系统命令 都是创建一个子进程!创建了子进程 父进程会等待回收子进程
4,举个例子来说,在'~/sxu'目录下执行(pwd;cd;pwd) 加上括号表明不传递到父进程,只是子进程执行三个命令 所以 当前不在 '~/' 目录之下
5,在操作系统之中 执行一个内建命令 相当于调用Shell进程中的一个函数 不需要 fork一个进程 但是 系统命令需要创建进程
6,bash 包含有内建命令 比如 echo 不仅是系统命令 也是 内建命令 执行命令的时候会先寻找 是否是内建命令 然后寻找是否是系统命令

本地变量与环境变量:
1,本地变量指的是shell进程之中的变量, 环境变量是所有的进程共享的变量 说白了,shell只是一个linux进程而已
# 定义一个本地变量
varname=value  # 等号两边都不能有空格 定义的是字符串 如果右边是 1 那么是指的是字符串'1'
export varname  # 将本地变量导入环境变量之中 两个命令等价于 export varname=value
env | grep varname  # 可以查找有没有 varname

echo ${varname}  #${varname} 表示取值 echo 表示打印

unset varname # 表示删除已定义的环境变量或本地变量,两者都用这个命令
shell 常见命令:
# 整数变量转换进制计算
var=1
#$(())中只能用+-*/和()运算符,并且只能做整数运算
echo  $(($var+1)) # 输出 2 两个 () 表示转换成整数 $var 是 ${var} 的简写
#$[base#n],其中base表示进制,n按照base进制解释,后面再有运算数,按十进制解释
echo $[2#10+11]  # 先计算 二进制 再十进制输出
echo $[8#10+11]

`ls ` # 反引号表示执行命令

# 在shell脚本编写之中 判断上一个指令是否执行成功
echo $? #表示查看上一个命令是否执行成功 如果返回0 表示执行成功 返回 -1 表示执行失败

# 单引号与双引号是有区别的
data=$(date)
echo "data"  #如果指向的是变量 那么就会展开变量,不是变量两者相同
echo  'data'  #就算是 变量不会展开,统统当做字符串

#执行 shell 的三种方式
./shell.sh
sourse shell.sh
. shell.sh
shell 高级命令(判断以及与或非)
#测试命令 test 或者 [ ] 一般与 if 连用
:<<COMMENT  # 多行注释
[ -d DIR ]              如果DIR存在并且是一个目录则为真
[ -f FILE ]             如果FILE存在且是一个普通文件则为真
[ -z STRING ]           如果STRING的长度为零则为真
[ -n STRING ]           如果STRING的长度非零则为真
[ STRING1 = STRING2 ]   如果两个字符串相同则为真
[ STRING1 != STRING2 ]  如果字符串不相同则为真
[ ARG1 OP ARG2 ]        ARG1和ARG2应该是整数或者取值为整数的变量,OP是-eq(等于)-ne(不等于)-lt(小于)-le(小于等于)-gt(大于)-ge(大于等于)之中的一个
COMMENT

var=1
test $var -gt 3  # 判断1是否大于等于 3
echo $?          # 返回 1 表示 false
[ $var -gt 0 ]   # 判断1是否大于等于 0
echo $?          # 返回 0 表示 true


#与或非
:<<COMMENT  # 多行注释
[ ! EXPR ]          EXPR可以是上表中的任意一种测试条件,!表示逻辑反
[ EXPR1 -a EXPR2 ]  EXPR1和EXPR2可以是上表中的任意一种测试条件,-a表示逻辑与
[ EXPR1 -o EXPR2 ]  EXPR1和EXPR2可以是上表中的任意一种测试条件,-o表示逻辑或
COMMENT

var=abd
[ -d Desktop -a $var='1' ]  # 与判断
echo $?

 

posted @ 2018-10-13 12:03  十七楼的羊  阅读(197)  评论(0编辑  收藏  举报