不求甚解

此博客为个人学习之用,如与其他作品雷同,纯属巧合。

导航

shell学习笔记

Posted on 2021-03-19 10:22  三年三班王小朋  阅读(60)  评论(0编辑  收藏  举报

简单了解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'
表3 涉及的颜色
色彩绿洋红
前景色 30 31 32 33 34 35 36 37
背景色 40 41 42 43 44 45 46 47

 

表1 转义字符
打印参数解 释
\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