shell学习记录

1. shell介绍

1.1 什么是shell

shell是一个程序,采用C语言编写,是用户和linux内核沟通的桥梁(因为内核采用的是二进制)。他既是一种命令语言,又是一种解释性的编程语言。

内核<—>shell<—>user

1.2 shell功能

  • 命令行解释功能
  • 启动程序
  • 输入输出重定向
  • 文件名置换(echo /*)
  • 变量维护
  • 环境控制
  • shell编程

2. shell语法

shell脚本就是将完成一个任务的所有的命令按照执行的先后顺序,自上而下写入到一个文本文件中然后给予执行权限。

2.1 如何写一个shell脚本

  1. shell脚本的命名:

    名字要有意义;虽然linux系统中文件没有拓展名的概念,但依然建议使用.sh结尾;名字不要太长

  2. shell脚本组成

    1. 解释环境:shell脚本开头必须指定脚本运行环境,以#!这个组合来组成的,且必须在开头行。如

      #!/usr/bin/bash
      #Author:
      #Created Time:
      #Script Description:
      echo "hello,world~"
      
    2. 注释说明:shell中的注释使用#号;shell中要有脚本信息

    3. 执行代码

    注:#!前面的#并不是注释

2.2 如何运行一个shell脚本(两种方法)

  1. 给予执行权限

    chmod u+x filename
    

    linux文件权限图

  2. 使用解释器直接运行,不需要给权限(不希望赋予脚本执行权限)

    bash、sh。。。(根据脚本的解释环境选择解释器)

2.3 shell中的特殊符号

2.3.1 shell符号表
符号意义
~根目录/家目录
!执行历史命令
!!执行上一条命令
!_(_可以是字母,也可以是数字)执行以_开头的最近的命令;执行在history中第_行的命令
$变量中取内容符
+ - * / %加、减、乘、除、取余数
&后台执行
*shell中的通配符,匹配所有字符
?shell中的通配符,匹配除回车以外的一个字符
;可以在shell中一行执行多个命令,命令之间用分号分隔
|上个命令的输出作为下个命令的输入,如:cat filename | grep "abc"
\转义字符
|命令中执行命令,如:echo "today is `date +%F`"
’ ’脚本中字符串要用单引号引起来,但与双引号不同的是,单引号不解释变量,如echo '$USER'---->$USER
" "脚本中字符串可以用双引号引起来,,如echo "$USER"---->root
` `将反引号内的Linux命令先执行,然后将执行结果赋予变量。
2.3.2 shell中的管道运用

|:管道符在shell中使用是最多的,很多组合命令都需要通过组合命令来完成。如:

cat filename | grep "abc"

其中,cat输出filename文件中的内容,而grep是搜索内容中含abc的行

2.3.3 shell重定向
  1. >:重定向输出,覆盖原数据。如:

    echo "123" > ./hello.sh
    cat hello.sh
    
    123
    

  2. >>:重定向追加输出,在原数据的末尾添加。如:

    echo "hello,world~" >> ./hello.sh
    echo "hello,world~" >> ./hello.sh
    echo "hello,world~" >> ./hello.sh
    cat hello.sh
    
    123
    hello,world~
    hello,world~
    hello,world~
    

  3. <:重定向输入,如

    wc < text.txt
    

  4. <<:重定向追加输入

2.3.4 shell数学运算
  1. expr:只能做整数运算,格式古板,注意空格

    注:出现*应该使用转义符/,否则认为是通配符;默认情况下不支持小数点

    expr 1 + 2
    expr 1 - 2
    expr 1 \* 2
    expr 1 / 2
    expr 10 % 3
    
  2. bc:文本界面计算命令,格式随意,不需要空格和转义符

    注:默认情况下不支持小数点,需要使用scale=x让其保留小数点后x位

  3. (()):小括号运算。在shell中双小括号可以用来做运算

    echo $((1+1))
    echo $((1-1))
    echo $((100*3/2))
    echo $(( (1+2)*3))
    echo $((100%3))
    echo $((10**3))		-->此行意思为10的3次方吧  
    
2.3.5 shell退出脚本

exit NUM:可以指定返回到echo $?中的值,其中NUM的值为1~255

vim exit.sh
#!/bin/bash
echo "haha"
exit 10
#./exit.sh
haha
#echo $?
10
2.3.5 练习
  1. 请解释echo "当前内存使用率:`echo "scale=2;141*100/7966"|bc`%"

    1.先将代码看成三个部分:① "···"|···②`echo ···` ③echo "···"
    2.先看第一部分:管道符将前面的 scale=2;141*100/7966 变成后面bc的命令进行运算——141*100/7966并保留两位小数
    3.再看第二部分,反引号将反引号内的命令先执行:echo将保留两位小数的结果输出,得到1.77
    4.最后看第三部分,echo将“当前内存使用率:”,“1.77”和“%”组合起来输出:当前内存使用率:1.77%
    

3. shell格式化输出

3.1 echo命令介绍

  1. 功能:将内容输出到默认显示设备(显示器)

  2. 语法:echo [-ne] [字符串]

  3. 命令选项

    1. -n:不要在最后自动换行(使代码美观)

      #echo "Login: ";read
      Login: 
      (输入内容)
      
      #echo -n "Login: ";read
      Login: (输入内容)
      
      #echo "date: ";date +%F
      date: 
      2021-10-26
      
      #echo -n "date: ";date +%F
      date: 2021-10-26
      
    2. -e:若字符串中出现一下字符,,则特别加以处理,而不会将它当成一般文字输出

      #echo "\a\a\a"
      \a\a\a
      
      #echo -e "\a\a\a"
      (三声警告音)
      
      1. \a:发出警告声

      2. \b:删除前一个字符

      3. \c:不产生进一步的输出,包括最后的自动换行

      4. \f:换行但光标仍旧停留在原来的位置

      5. \n:换行(执行终端命令时,会自动换行一次,所以会增加n+1行)

        #echo -e "\n\n"
        
        
        
        #
        
      6. \r:光标移至行首,但不换行

      7. \t:插入tab键

      8. \v:与\f相同

      9. \:插入\字符

      10. \nnn:插入nnn(八进制)所代表的ASCII字符

3.2 代码颜色

语法:echo -e "\033[字背景颜色; 文字颜色m字符串\033"

例如: echo -e “\033[41;36m something here \033[0m”

其中41的位置代表底色, 36m的位置是代表字的颜色

1、字背景颜色和文字颜色之间是英文的

2、文字颜色后面有个m

3、字符串前后可以没有空格,如果有的话,输出也是同样有空格

下面是相应的字和背景颜色,可以自己来尝试找出不同颜色搭配

  例
  echo -e “\033[31m 红色字 \033[0m”
  echo -e “\033[34m 黄色字 \033[0m”
  echo -e “\033[41;33m 红底黄字 \033[0m”
  echo -e “\033[41;37m 红底白字 \033[0m”
  
字颜色:30—–37
  echo -e “\033[30m 黑色字 \033[0m”
  echo -e “\033[31m 红色字 \033[0m”
  echo -e “\033[32m 绿色字 \033[0m”
  echo -e “\033[33m 黄色字 \033[0m”
  echo -e “\033[34m 蓝色字 \033[0m”
  echo -e “\033[35m 紫色字 \033[0m”
  echo -e “\033[36m 天蓝字 \033[0m”
  echo -e “\033[37m 白色字 \033[0m”

  
字背景颜色范围:40—–47
  echo -e “\033[40;37m 黑底白字 \033[0m”
  echo -e “\033[41;37m 红底白字 \033[0m”
  echo -e “\033[42;37m 绿底白字 \033[0m”
  echo -e “\033[43;37m 黄底白字 \033[0m”
  echo -e “\033[44;37m 蓝底白字 \033[0m”
  echo -e “\033[45;37m 紫底白字 \033[0m”
  echo -e “\033[46;37m 天蓝底白字 \033[0m”
  echo -e “\033[47;30m 白底黑字 \033[0m”
  
最后面控制选项说明
  \033[0m 关闭所有属性
  \033[1m 设置高亮度
  \033[4m 下划线
  \033[5m 闪烁
  \033[7m 反显
  \033[8m 消隐

  \033[30m — \33[37m 

设置前景色
  \033[40m — \33[47m 设置背景色
  
  
  \033[nA 光标上移n行
  \033[nB 光标下移n行
  \033[nC 光标右移n行
  \033[nD 光标左移n行
  \033[y;xH设置光标位置
  \033[2J 清屏
  \033[K 清除从光标到行尾的内容
  \33[s 保存光标位置
  \033[u 恢复光标位置
  \033[?25l 隐藏光标
  \033[?25h 显示光标

4. shell基本输入

4.1 read命令

  1. 功能:默认接受键盘的输入,回车符代表输入结束

  2. 应用场景:人机交互

  3. 命令选项

    1. -p:打印信息

    2. -t:限定时间

    3. -s:不回显(一般使用在输入密码的时候)

    4. -n:输入字符个数

      #!/bin/bash
      clear
      
      echo -n "Login: "
      read Log
      echo -n "Password: "
      read -s -t5 -n6 Pwd
      echo
      
      echo "Login: $log	Password: $pwd"
      

未完结

X.tips

  1. $?判断上一条命令是否执行成功,如果是0就执行成功,如果是非0就没有执行成功
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值