shell教程

一、shell的功能

1.Linux操作系统的核心原理都是基于shell实现外层应用程序和内核以及硬件的通信,从而实现人对机器的控制。

2.shell的主要功能:

  • Linux系统管理和运维:例如批量增加/删除多个用户

  • 文本处理

  • 数值运算

  • 整合其他软件/语言,搭建流程

3.shell的版本

        (1)sh:最基础的shell

        (2)bash:在sh的基础上增加了一下特性,最常用的shell。

        (3)csh:类C的语法

        (4)tcsh:csh增强版

        使用echo $SHELL 查看系统默认使用的shell版本 

        cat  /etc/shells  查看安装的所有shell版本

二、变量和注释

第一句#!/bin/bash,以#!紧接程序解释器路径/bin/bash的方式告诉计算机要用/bin/bash程序来解释执行我们的脚本

        1.创建变量:a=字符、数值、数组等等内容,注意:=号两边不能有空格

        2.使用变量:${变量名} 或 $变量名

        3.打印变量:echo ${变量名} 或  echo $变量名

        4.使用#来注释,多行注释使用EOF

        5.变量作用域:

                (1)全局变量(global variable),可以在当前Shell进程(即一个shell窗口)中使用,Shell中定义的变量默认就是全局变量

                 (2)局部变量(local variable),只能在函数内部使用,注意函数内部定义的变量也是可以在函数外生效,在变量名称之前加上local关键字定义所谓的局部变量

                                环境变量(environment variable),可以在子进程中使用,使用export命令将全局变量导出,那么它就在所有的子进程中也有效了,这称为“环境变量”。

                6.常用系统变量

                        $0       表示当前shell脚本的文件名

                        $1 $2  当前shell脚本的位置参数

                        $#   传递到脚本的参数总个数

                        $? 上一个命令的执行结果,0是执行成功,非0是执行失败

                7.只读变量:使用 readonly 命令定义只读变量,只读变量的值不能被改变。

                8.删除变量:unset 变量名  unset 命令不能删除只读变量。

三、字符串操作

1.获取字符串的长度:${#变量名}

2.指定位置截取字符串

        (1)echo ${变量名:4:5}  从第4个字符开始,截取5个字符。

        (2)echo ${变量名:4}       从第4个字符.开始截取到最后

        (3)echo ${变量名:0-3}  从倒数第三个字符截取到最后

                 echo ${变量名:  -3} 另外的写法,一定要注意冒号和-3之间有空格

3.匹配字符串截取

        net=hhwhoarewyou 

       (1)echo ${net#*w}   删除从左到右第一个遇到的字符及其左侧的字符

       (2)echo ${net##*w} 删除从左到右最后一个遇到的字符及其左侧的字符(贪婪模式)

       (3)echo ${net%w*}   删除从右向左第一个遇到的字符及其右侧的字符

       (4)echo ${net%%w*} 删除从右到左最后一个遇到的字符chr及其右侧的字符(贪婪模式)

4.字符串替换

            需要注意的是原变量并未修改

        (1)echo ${变量/匹配字符/替换字符}   替换第一个匹配到的字符

        (2)echo ${变量// 匹配字符/替换字符}  替换所有匹配到的字符

        (3)${变量/#匹配字符/替换字符 只替换开头匹配的字符串 

        (4)${变量/%匹配字符/替换字符}只替换结尾匹配的字符串

5.删除字符串

        (1)echo ${变量/要删除的字符/} 或echo ${变量/要删除的字符} 删除第一个匹配到的字符

           (2)echo ${变量//要删除的字符/}  或echo ${变量//要删除的字符}       删除所有匹配到的字符

6.字符串拼接

        greeting="hello, "$your_name" !"

        greeting_1="hello, ${your_name} !"

        echo $greeting $greeting_1

四、数组

        1.类似于python中的列表,不过用()表示,只有一维数组

        2.数组创建

                (1)names=(Jerry Jane 赵四 刘能)

                (2)names[0]=Jerry

                        names[1]=Jane

                        names[2]=赵四

                        names[3]=刘能

                (3)name=([0]=Jerry  [1]=Jane [2]=赵四 [3]=刘能)

                (4) str=" Jerry Jane 赵四 刘能"

                      names=($str)

3.数组删除

        list=(book food)

        (1)echo ${list[@]#b*o}  每个元素,从左向右进行最短匹配

        (2)echo ${list[@]##b*o}  每个元素,从左向右进行最长匹配

        (3)echo ${list[@]%f*d}    每个元素,从右向左进行最短匹配

        (4)echo ${list[@]%%f*d}每个元素,从右向左进行最长匹配

          (5) unset list[0]   删除索引为0的元素  unset 数组名 删除整个数组

        

        

4.修改数组:数组名[索引]=修改的值

5.取值

        (1)获取单个值:${数组名[索引]}

        (2)获取整个数组:${数组名[@]} 或${数组名[*]}

                ${数组名[@]}得到是以空格隔开的元素,可以用在数组遍历中;${数组名[*]}得到的是一整个字符串。

6.其他操作

        (1)获取数组长度:  ${#days[@]} 或${#days[*]}

        (2)获取数组的的索引:${!数组[@]}

        (3)数组切片:${数组[@]:1:3}

        (2)两个数组连接: 用()将多个数组连接在一起,()中各个数组用空格隔开。

                days=(one two three four)
                names=(tom jack)
                days=(${days[@]} ${names[@]})

五、流程控制

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

        (1)if语句

                基本语法:if[条件];then;ellifelse;fi

n=$((2*3))
n1=$[3+2]
if test $n1 -eq $n
then
	echo "两个数相等"
else
	echo "两个数不等"
fi

      (2)case语句

case ${n} in
1)echo "n===1";;
2)echo "n==2";;
3)echo "n==3";;
*)echo "n=!1,2,3";;
esac

        (3)for循环

                基本语法:

                for loop in 1 2 3 4 5
                do
                    echo "The value is: $loop"
                done

        (4)while 循环

n=10
i=1
while [ ${n} -gt ${i} ]
do
echo $i
i=$((i+1))
done

(5)printf用法

printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876

%s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。

%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

%-4.2f 指格式化为小数,其中 .2 指保留2位小数

六、函数和运算

        1.定义函数的两种方法

              (1)函数名(){}

              (2)function 函数名 {} 注意:函数名和{}之间必须有空格

        2.函数返回值

                (1)使用return返回:只能返回1-255的整数,

                (2)使用echo返回数据

       3.运算

                (1)n=$((2*3))

                (2)n=$[2+6]

                (3)let n=1+3

                (4)n=`expr 3 + 4`

                (5)bc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值