简单了解shell
Shell 是操作系统的最外层, Shell 可以合并编程语言以控制进程 和文件,以及启动和控制其它程序。 shell 通过提示您输入,向操作 系统解释该输入, 然后处理来自操作系统的任何结果输出来管理您与 操作系统之间的交互。 简单来说 Shell 就是一个用户跟操作系统之间 的一个命令解释器。
Linux Shell 种类非常多, 常见的有:Bourne Shell (/usr/bin/sh 或/bin/sh )、Bourne Again Shell (/bin/bash )、C Shell (/usr/bin/csh )、K Shell (/usr/bin/ksh )、Shell for Root (/sbin/sh )等。不同的 Shell 语言的语法有所不同,所以不能交换 使用。 最常用的 shell 是 Bash,也就是 Bourne Again Shell。
Shell 编程之变量详解 Shell 编程语言是非类型的解释型语言 , 不像 C++/JAVA语言编程 时需要事先声明变量, SHELL给一个变量赋值 , 实际上就是定义了变 量, 在 Linux 支持的所有 shell 中, 都可以用赋值符号 (=) 为变量赋值。 SHELL变量可分为两类:局部变量和环境变量。
SHELL常见的系统变量解析 :
$0 当前程序的名称
$n 当前程序的第 n 个参数 ,n=1,2, , 9
$* 当前程序的所有参数 ( 不包括程序本身 )
$# 当前程序的参数个数 ( 不包括程序本身 )
$? 命令或程序执行完后的状态,一般返回 0 表示执行成功。
$UID 当前用户的 ID
$PWD 当前所在的目录
打印出文本颜色
echo -e "\033[颜色1;颜色2m 要展示的文字 \033[0m"
-
-e选项:表示允许反斜杠(对字符)转义。
-
\033[颜色1;颜色2m:称为转义序列,它本身是一个整体,中间不要有空格。
-
\033[:转义序列的开始。其中\033代表Esc符号,也可以使用\E或\e来代替。
-
颜色1和颜色2:表示字体的前景色或背景色,至于颜色1和颜色2哪一个表示前景色,哪一个表示背景色,由其设定的数值来决定,前景色和背景色的数值空间是不同的。
-
m:转义序列的终止标志。
-
\033[0m:表示将颜色恢复回原来的配色;\033[1m:表示将下面文本颜色全部替换。
echo -e '\033[32m-----------------------------\033[0m'
色彩 | 黑 | 红 | 绿 | 黄 | 蓝 | 洋红 | 青 | 白 |
---|---|---|---|---|---|---|---|---|
前景色 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 |
背景色 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
打印参数 | 解 释 |
---|---|
\a | 响铃 |
\b | 退格(backspace) |
\e | 转义符 |
\c | 不换行 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ONNN | 字节数以八进制数 NNN (1 至 3 位)表不 |
\xHH | 字节数以十六进制数 HH (1 至 2 位)表不 |
语句学习
在 Linux Shell 编程中条件语句常见有 if 、for 、while 、case 等条件流程控制
If 条件判断语句
两个简单的案例
#!/bin/bash NUM=100 if (( $NUM > 4 )) ;then echo “this num is $NUM greater 4 ! ” fi
#!/bin/bash SCORES=$1 if [[ $SCORES -ge 80 && $SCORES -le 100 ]];then echo "优秀" elif [[ $SCORES -ge 60 && $SCORES -lt 80 ]];then echo "及格" elif [[ $SCORES -ge 0 && $SCORES -lt 60 ]];then echo "不及格" else echo "数字非法" fi
关系运算符解析:
bash命令
[ expression ] 一个中括号,其中内容为命令,括号两端必须要有空格; [[ expression ]] 两个中括号,其中内容为关键字,括号两端必须要有空格; test expression
组合测试条件:
与:-a
或:-ogreater equal
非:!
通常用在[ ],或` `中
bash命令组合测试:
与:&&
或:||
非:!
二、整数测试:
expression:$A 比较符号 $B
等于:-eq 相当于equal
不等:-ne 相当于not equal
大于或等于:-ge 相当于greater equal 例如:$A –ge $B
小于或等于:-le 相当于less equal
大于:-gt 相当于greater equal
小于:-lt 相当于less equal
三、字符测试:
>:大于
>:大于
==:等于 #注意一个=是赋值,赋值时,等号两边也不要空格,A=B,A = B是不同的两个概念
!=:不等于
=~:判断左边的字符串是否能够被右边的模式所匹配;通常用于` `;例如[[ $opt =~ $opt ]]
单目操作
-z $A:为空则为真,不空则为假
-n $A:为空则为假,不空则为真
四、文件测试
操作符 文件路径
-f: 测试其是否为普通文件,即ls -l时文件类型为-的文件
-d: 测试其是否为目录文件,即ls -l时文件类型为d的文件
-e: 测试文件是否存在;存在为真,否则为假
-r: 测试文件对当前用户来说是否可读
-w: 测试文件对当前用户来说是否可写
-x: 测试文件对当前用户来说是否可执行
-s: 测试文件大小是否不空,不空则真,空则假
-z string 测试指定字符是否为空,空着真,非空为假
-n string 测试指定字符串是否为不空,空为假 非空为真
-a 是否不空
if语句常见结构
1. Bash If..then..fi statement
if [ conditional expression ]; then statement1 statement2 fi
2. Bash If..then..else..fi statement
If [ conditional expression ]; then statement1 statement2 else statement3 statement4 fi
3. Bash If..elif..else..fi
If [ conditional expression1 ]; then statement1 statement2 elif [ conditional expression2 ]; then statement3 statement4 else statement5 fi
4. Bash If..then..else..if..then..fi..fi..
If [ conditional expression1 ];then statement1 statement2 else if [ conditional expression2 ];then statement3 fi fi
2. if的条件表达式中有多个
if [ cond1 ] && [ cond2 ] && [ cond3 ] then ....
if [[ cond1 && cond2 && cond3 ]] then ....
if [ cond1 -a cond2 -a cond3 ] then ....
bash下 . : () {} [] [[]] (()) 的解释 :
1) . 与source命令一样,从文件中读取并执行命令,无论该文件是否都有可执行权限都能够正确的执行。且是在当前shell下执行,而不是产生一个子shell来执行(我们通常使用“./filename.sh”去执行一个文件是在当前shell下产生一个子shell去执行的)
2) : 该命令什么都不做,但执行后会返回一个正确的退出代码,即exit 0,类似于pass
3) () 将多个命令组合在一起执行,相当于一个命令组。
4) {} 和()类似,也是将多个命令组合在一起。它们之间的区别是,()是在产生的子shell下执行,而{}是在当前的shell下执行。
5) [] 与test命令一样,用于比较值以及检查文件类型
6) [[]]可以说是[]的“增强版”,它能够将多个test命令支持的测试组合起来
7) (())专门来做数值运算,如果表达式求值为 0,则设置退出状态为 1;如果求值为非 0 值,则设置为 0。
个人理解:
1、数字运算,大于小于==,"||"和"&&" 最好用[[]]括号
2、(())用于数字运算 用 <,> ;不支持 -lt -gt