shell自学笔记01

一、概述:

1.1、简介:

shell是用C语言编写的程序,它是用户使用 Linux 的桥梁。Shell既是一种命令语言,又是一种程序设计语言。linux中的shell就是linux内核的一个外层保护工具,并负责完成用户与内核之间的交互。

1.2、常用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)

    ……

1.3、shell编写注意事项:

  • shell命名:shell脚本名称一般为英文大小写,不能以特殊符号、空格开头(名称要一眼看出功能);

  • shell编程首行需要以#!/bin/bash开头开头;

  • 脚本中变量不能以数字、特殊符号开头,可以使用下划线“__”,不能使用“-”。

二、变量:

2.1、变量详解:

shell编程中变量分为三种,分别是系统变量、环境变量、用户变量。

2.1.1、系统变量:

又称shell变量,主要用于对参数判断和命令返回值判断时使用,shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

 

2.1.2、环境变量:

主要是在程序运行时需要设置,所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

2.1.3、用户变量:

又称局部变量,局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

2.2、变量操作:

2.2.1、命令变量:

shell编程中,定义变量是直接定义的,没有明确的数据类型,shel允许用户建立变量存储数据,但是将认为赋给变量的值都解释为一串字符

2.2.2、变量操作:

  • 普通变量:name="tes",等号两边不能有空格;

  • 局部变量:local name="test",使用local修饰的变量在函数体外无法访问,只能在函数中使用;

  • 只读变量:name="only_read" -> readonly name;

  • 使用变量:echo $name或echo ${name},shell中”$“用于取变量值,对于较长的变量名,通常加上”{}“,帮助解释器识别变量边界;

  • 删除变量:unset name,删除之后的变量无法被访问,只读变量无法删除。

三、shell字符串:

3.1、字符串创建:

在shell中字符串时shell编程中最常用最有勇的数据类型,字符串的创建可以用单引号,双引号,也可以不用引号。

3.1.1、单引号创建:

单引号里的任何字符都会原样输出,单引号字符串中的变量时无效的;

不能出现单独意哥的单引号,无法转义和使用转义符。

3.1.2、双引号创建:

可以在双引号中使用变量 、转义字符。

3.2、字符串拼接:

3.2.1、字面拼接:

字符串a和b拼接:str=”a“”b“str=‘a’‘b’,需要注字符串之间不能有空格。

3.2.2、变量拼接:

字符串变量part01和part02拼接str=${part01}${part02}str="${part01}${part02}"str=${part01}"end"(变量part01和字符串end拼接)。

3.2.3、命令拼接:

str='data'"end",其中的data是一个shell命令,需要使用引用。

3.3、获取字符串长度:

3.3.1、wc -L

wc -L可以获取当前行的长度,因此对于单独行的字符串可以用这个简单的方法获取,另外wc -l则是获取当前字符串内容的行数。

3.3.2、expr lenth:

3.3.3、awk获取域的个数:

若大于10个字符的长度时是否存在问题需要后期确认

3.3.4、awk+length获取字符串长度:

3.3.5、使用" # "符号对字符串进行取值echo ${#name}:

 示例:
 #!/bin/bash
 ​
 str1=yang
 str2=lei
 str3="str1""str2"
 str4=${str1}${str2}
 str5=${str1}"end"
 str6="${str1}${str2}"
 ​
 str7=abcdefghijklmn
 ​
 echo $str3 $str4 $str5 $str6
 echo $str5 |wc -L
 expr length ${str1}
 ​
 echo "abc" |awk -F "" '{print NF}'
 ​
 echo ${#str7}

3.4、字符串的提取:

  • #号截取,删除左边字符,保留右边字符(包括为基准的字符);

  • ##号截取,删除左边字符,保留右边字符;

  • %号截取,删除右边字符,保留左边字符;

  • %%号截取,删除右边字符,保留左边字符;

  • :x:y从左边第几个字符开始,及字符的个数,其中的x表示左边第一个字符开始,y 表示字符的总个数。

  • :x从左边第几个字符开始,一直到结束,其中的 x 表示左边第x+1个字符开始,一直到结束。

  • :0-x:y从右边第几个字符开始,及字符的个数,其中的 0-x 表示右边算起第x个字符开始,y 表示字符的个数。

  • :0-x从右边第几个字符开始,一直到结束,表示从右边第x个字符开始,一直到结束。

代码含义
${var##*string}从左向右截取最后一个string后的字符串
${var#*string}从左向右截取第一个string后的字符串
${var%%string*}从右向左截取最后一个string后的字符串
${var%string*}从右向左截取第一个string后的字符串

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值