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 $?