我是靠谱客的博主 饱满煎饼,最近开发中收集的这篇文章主要介绍Linux基础 03 - Shell脚本,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  Shell是一个命令行解释器,是Linux系统用户与内核交互的一个桥梁。Shell脚本是shell命令的有序集合,将shell命令放在一个文件中,这个文件就是shell脚本。shell不仅可以执行简单的命令语法,还能执行复杂的逻辑语法。

本文使用Ubuntu系统学习shell脚本,该系统使用的shell版本为bash。
创建一个shell脚本

vi test.sh

shell脚本是一种解释性语言,所以不需要编译

注释

#这是单行注释

:<<"EOF"
这是多行注释
这是多行注释
EOF

运行shell脚本

#直接运行可能没有权限,先给权限
chmod 0777 test.sh
./test.sh
②
bash test.sh
③
source test.sh

三种运行shell脚本方式的区别:

./test.sh 和 bash test.sh #运行时会创建一个子终端运行,再把运行结果返回给当前终端;
source #在当前终端运行,一般用来让脚本生效;

Shell变量

shell变量的使用
1.变量命名 字母数字下划线不以数字开头
2.变量不需要定义,直接使用
3.变量前面不需要数据类型
4.变量名一般见名知意
5.变量赋值时等号两边不能有空格
6.一句命令不需要分号隔开
7.变量保存的内容都默认为字符串
#变量的引用
$var
${var}
#变量的重新赋值
var=hello
var=world //不能写成 $var=word (相当于把world赋值给hello) 出错
#变量的追加赋值
var=hello
var="$var world"
#取消变量的赋值
unset var

echo命令

echo str          #输出自动换行
echo -n str       #输出不换行
echo -e "n str"  #-e开启解释转义字符 默认-E 关闭

命令置换

#命令置换相当于把一个命令的结果赋值给一个变量
#方式1:
	ret=`ls`#[反引号] (不会输出ls结果,只是把其结果赋值给ret)
#方式2:
	ret=$(ls)
	
#把命令置换的结果赋值给命令行参数
set ${ret}

位置变量

#命令行参数:
	$0 $1 $2 $3 ...... ${10}
#bash执行    $0 为脚本文件名
#source执行  $0 为 bash
$*  #全部命令行参数(不包括文件名)
$#  #命令行参数的个数(不包括文件名)
$$  #该进程的进程号

字符串的处理

#字符串的拷贝
str1=hello
str2=world
str1=$str2

#字符串的连接
str1=hello
str2=world
str1="$str1$str2"

#字符串长度
${#str}

提取字符串

#设str为
str="www.baidu.combaidu.combaidu.com"
#方式1:
    ${str:start:len}
      从 start (0开始计)开始,提取 len 个字符
        eg:
          echo ${str:4:5} //baidu

#方式2:
    ${str:start}
      从 start 开始提取右边 所有 字符
        eg:
          echo ${str:4} //baidu.combaidu.combaidu.com
  
#方式3:
    ${str:0-start:len}
      从 右往左 数到 start,取start后len个字符  右是从1开始
        eg:
          echo ${str:0-10:5} //mbaid

#方式4:
    ${str:0-start}
      从 右往左 数到 start,取start后所有字符
        eg:
          echo ${str:0-10} //mbaidu.com
  
#方式5:
    ${str#*sub}
      从 左往右 搜索 第一次 出现sub的位置,输出 sub后 的所有内容
        eg:
          echo ${str#*sub} //du.combaidu.combaidu.com
  
#方式6:
    ${str##*sub}
      从 左往右 搜索 最后一次 出现sub的位置,输出 sub后 的所有内容
        eg:
          echo ${str##*sub} //du.com
  
#方式7:
    ${str%sub*}
      从 右往左 搜索 第一次 出现sub的位置,输出sub 前面 的所有内容
        eg:
          echo ${str%sub*} //www.baidu.combaidu.com
  
#方式8:
    ${str%%sub*}
      从 右往左 搜索 最后一次 出现sub的位置,输出sub 前面 的所有内容
        eg:
          echo ${str%%sub*} //www.

数组
Shell 只支持一维数组,成员都是字符串

#数组的初始化
  arr=(1 2 3 4 "hello world" aa bb cc)
   #或者
#不按照元素下标顺序赋值
  arr=([0]=100 [3]=300 [5]="hello v"
  
#注意 没有被赋值的为 空
#数组的引用
  ${arr[0]} ${arr[1]} ......

#修改元素的值:
  arr[3]=aa
  
#访问数组所有内容:
  ${arr[*]}  或者  ${arr[@]}
#数组的大小 是一个数组被赋值的元素的个数
  ${#arr[*]}  或者  ${#arr[@]} 
#数组添加元素
    *添加元素 数组 会重新排列,有空格的会被分开*
    *若是跳跃赋值,那么重新排列以后下标会重新赋值*
eg:
        arr=([0]=a [3]=[b] [5]=c)
        arr=(${arr[*]} "hello world")
        arr=$arr{arr[*]}
        结  果  为    a   b   c   "hello world"
        下标依次为    0   1   2    3
        
#末尾添加:
    arr=(${arr[@]} "AAA")
  
#开头添加:
    arr=("bbb" ${arr[@]})
#清空数组
  unset arr        #清空着整个数组
  unset arr[下标]  #清空某个元素

read 命令行输入

1.read var
2.read var1 var2
  #从终端输入两个变量,以第一个空格作为分割分别赋给两个变量
3.read -p "提示语句" <变量名>
4.read -a <数组名>       #(以 空格 作为每个元素的分隔)
5.read -n num <变量名>   #当输入的字符个数等于 num 就自动结束输入
6.read -s <变量名>       #静默输入(没有回显)
7.read -t <单位秒>       #限制在单位秒内输完,超时自动结束

Shell变量的运算
shell变量保存的是字符串所以不能常规性的进行运算,需要借助特殊符号

    + - * / += -= *= /=
    ** 幂运算
    && || !
    & | ~
    > < >= <= ==
(( ))
1.支持整数运算
2.(()) 里面引用变量的值的时候可加$,可不加
  ((var += $var))
  ((var++))
3.可以把 $((表达式))赋值给一个变量
4.(())可以像C语言进行复杂运算
5.&?  判断上一句代码的执行情况,成功返回0,失败返回1
6.((表达式1,表达式2,表达式3......))
  #执行结果为最后一个表达式的值
$[]
1.支持整数运算
2.必须要把结果赋给一个变量
3.引用变量的值的时候可以加$也可以不加
4. ret=$[表达式1,表达式2,表达式3]
        #执行表达式3的结果
5.支持幂运算
expr
1.既能进行整数运算,也能操作字符串
2.在引用变量的时候一定要加 $
3.expr 在使用时要加空格
4.可以直接输出结果到终端
5.不支持一些如 += -= 的复合运算,不支持幂运算
6.在做 * > < 时需要加转义字符
7.在赋值时需要 命令置换

①匹配字符串
expr match $str1 "str2"
          比较str1和str2,遇不同结束,返回相同的个数
          *特殊情况**str1不小于str2**有空格要加双引号 都要加*

②字符串的截取
expr substr "$str" start len
          从(0开始)start个数开始 截取 len 个字符

③字符串长度
expr length "$str" //若str中有空格 要加双引号
        (echo ${#str})

④查找子串
expr index "$str" "sub"
          若找到字串,那么值为第一次出现子串的位置(零开始数)

最后

以上就是饱满煎饼为你收集整理的Linux基础 03 - Shell脚本的全部内容,希望文章能够帮你解决Linux基础 03 - Shell脚本所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部