自学shell编程——第1讲(基础概念、变量、符号、字符串处理、列表)

自学shell编程——第1讲(基础概念、变量、符号、字符串处理、列表)

1. 常见shell命令

ls cd more less pwd mkdir clear touch vim chmod grep cp ln mv man ps -ef

查看这些命令的帮助文档:man less或less --help

2. shell编程和C语言编程的差距

C语言:①文本编辑器编辑文件hello.c;②进行编译:gcc hello.c -o hello.o,则该目录下会生成一个可执行的hello.o文件;③执行:./hello.o
shell编程:①文本编辑器编辑文件hello.sh;②不需要编译,但需要修改执行权限:chmod 777 ./hello.sh;③执行:./hello.sh

3. shell文件的基础知识

  1. *.sh文件第一行#/bin/bash,指明bash解析器的路径
  2. *.sh文件命名可以包括数据、字母、下划线,且都可以作为开头
  3. *.sh文件是按行依次执行,并不存在主函数
  4. 没有printf输出语句,使用echo输入到终端或文件
  5. echo -e “hello\nword!” ===> 识别换行符,输出两行
  6. echo -e “hello\tword!” ===> 识别Tab键,输出hello world

4. shell变量的定义与使用

  1. 变量的命名:可以包括数据、字母、下划线,但是数字不能作为开头,其它两者可以
  2. 变量不需要声明数据类型,全部默认字符串类型
  3. 变量的赋值,等号的两边不需要出现空格。str=hello
  4. 变量的引用,在变量前加上$符号
  5. 变量的种类:①用户自定义变量;
    ②命令行变量:** 这里强调,一个良好的书写习惯。只要你使用了命令行传参,那么你就在shell脚本的最开头,做一个判断参数数量的判断。**
    a. $#:用于识别外部/命令行传参的个数;
    b. $*:命令行所有参数,作为一个字符串;
    c. $1、$2、$3……:代表依次传入的参数内容;
    d. $?:代表 ** 上一条 ** shell语句的执行结果返回值(成功0;失败非0数)。
#!/bin/bash
touch file.txt
test -e file.txt      #判断file.txt是否存在,因为前面新建了,所以存在
echo "$?"             #输出上一条语句的返回值0

test -e newfile.txt   #判断newfile.txt是否存在,因为前面没有新建了,所以不存在
echo "$?"             #输出上一条语句的返回值1
#执行:会输出两个数字,先0后1。

5. shell的符号

  1. 双引号(" “)作用:将某些对象变成字符串输出。三种情况:
    ①字符串中存在空格,使用双引号。a=“hello world”
    ②当双引号中存在变量时。b=”$str 123"
    ③当双引号中为shell命令时,即对命令的结果进行操作时,需要与反引号共用。
	echo " `ls -l ` "
  1. 单引号(’ ')作用:把包裹的内容当做字符串使用
	echo " day is ` date ` "         #输出为:day is Sun Dec 14th 2020……
	echo ' day is `date` '           #输出为:day is `date`
  1. 反引号作用:对双引号中的shell命令进行识别并执行 #### 因为反引号在markdown中有含义,所以反引号比较难输入
  2. 重定向符(>):覆盖文件内容;(>>):追加内容至文件中

6. 字符串处理

建议:这是一个编程语言,重要是使用,有些地方理解不了,我就放过了。

计算字符串长度${#str}

str="hello world"
length=${#str};echo $length           #输出字符串长度为11
这里将加一个知识点。通配符————以后的正则表达式学习基础
  1. *:代表任意长度的任意字符
  2. ?:代表长度为1的任意字符
  3. [a-z]:代表a到z的任意1个字符
  4. [az]:代表a或z的任意1个字符
  5. [ ^az]:代表a和z除外的任意1个字符(注:这里 ^前面没有空格,markdown的 ^有含义)
  6. %:代表从右到左尽可能少的匹配
  7. %%:代表从右到左尽可能多的匹配
  8. #:代表从左到右尽可能少的匹配
  9. ##:代表从左到右尽可能多的匹配
这里的多和少的匹配指匹配到的字符串长度,要好好理解

字符串合并

直接连起来写,不需要任何连接。如果中间要加空格、下划线、加号(+)、减号(-)等字符,则需要双引号;若直接使用,则会报错

str1=hello;str2=world
str=$str1$str2                #输出str为helloworld
str=$str1" "$str2             #输出str为hello world
str=$str1"_"$str2             #输出str为hello_world
str=$str1 $str2               #报错:not found command

字符串删除。包括删除一定长度或者一定匹配条件下删除

使用前面提到的通配符。重点是理解下面的例子。

str="123111abcaaabhelloworldbcccba321"
#从左到右删除,删除前面所有数字,观察需要删除123111,则1是最后一个数字,但是只用1卡,发现不对。所以我们同时用两个卡
echo ${str#*1}                   #输出23111abcaaabhelloworldbcccba321
echo ${str##*1}                  #尽可能匹配多的*1,发现全部就删除了
echo ${str##*11}                 #输出abcaaabhelloworldbcccba321
#从右到左删除
echo ${str%3*}                   #输出123111abcaaabhelloworldbcccba
echo ${str%%3*}                  #输出12
#保留helloworld,先左删后右删
str1=${str##*ab}                 #str1=helloworldbcccba321
str2=${str1%%b*};echo $str2      #str2=helloworld

7. 列表

shell脚本中创建列表
list1=(A B C D) #用空格间隔即可,变量不需要引号
for element in ${list1[@]}
do
echo ${element}
done

总结:上面仅仅是对字符串的长度计算、合并、删除。搞清楚你要对字符串进行的操作,是你选择使用什么样语句的基础。若你对字符串的操作很复杂,那你可以使用python/perl/C等语言,而不是死磕shell。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值