1. shell介绍
1.1 什么是shell
shell是一个程序,采用C语言编写,是用户和linux内核沟通的桥梁(因为内核采用的是二进制)。他既是一种命令语言,又是一种解释性的编程语言。
内核<—>shell<—>user
1.2 shell功能
- 命令行解释功能
- 启动程序
- 输入输出重定向
- 文件名置换(echo /*)
- 变量维护
- 环境控制
- shell编程
2. shell语法
shell脚本就是将完成一个任务的所有的命令按照执行的先后顺序,自上而下写入到一个文本文件中然后给予执行权限。
2.1 如何写一个shell脚本
- 
shell脚本的命名: 名字要有意义;虽然linux系统中文件没有拓展名的概念,但依然建议使用.sh结尾;名字不要太长 
- 
shell脚本组成 - 
解释环境:shell脚本开头必须指定脚本运行环境,以 #!这个组合来组成的,且必须在开头行。如#!/usr/bin/bash #Author: #Created Time: #Script Description: echo "hello,world~"
- 
注释说明:shell中的注释使用#号;shell中要有脚本信息 
- 
执行代码 
 注: #!前面的#并不是注释
- 
2.2 如何运行一个shell脚本(两种方法)
- 
给予执行权限 chmod u+x filename 
- 
使用解释器直接运行,不需要给权限(不希望赋予脚本执行权限) 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重定向
- 
>:重定向输出,覆盖原数据。如:echo "123" > ./hello.sh cat hello.sh123
 
- 
>>:重定向追加输出,在原数据的末尾添加。如:echo "hello,world~" >> ./hello.sh echo "hello,world~" >> ./hello.sh echo "hello,world~" >> ./hello.sh cat hello.sh123 hello,world~ hello,world~ hello,world~
 
- 
<:重定向输入,如wc < text.txt
 
- 
<<:重定向追加输入
2.3.4 shell数学运算
- 
expr:只能做整数运算,格式古板,注意空格注:出现*应该使用转义符 /,否则认为是通配符;默认情况下不支持小数点expr 1 + 2 expr 1 - 2 expr 1 \* 2 expr 1 / 2 expr 10 % 3
- 
bc:文本界面计算命令,格式随意,不需要空格和转义符注:默认情况下不支持小数点,需要使用 scale=x让其保留小数点后x位
- 
(()):小括号运算。在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 练习
- 
请解释 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命令介绍
- 
功能:将内容输出到默认显示设备(显示器) 
- 
语法:echo [-ne] [字符串] 
- 
命令选项 - 
-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
- 
-e:若字符串中出现一下字符,,则特别加以处理,而不会将它当成一般文字输出#echo "\a\a\a" \a\a\a #echo -e "\a\a\a" (三声警告音)- 
\a:发出警告声
- 
\b:删除前一个字符
- 
\c:不产生进一步的输出,包括最后的自动换行
- 
\f:换行但光标仍旧停留在原来的位置
- 
\n:换行(执行终端命令时,会自动换行一次,所以会增加n+1行)#echo -e "\n\n" #
- 
\r:光标移至行首,但不换行
- 
\t:插入tab键
- 
\v:与\f相同
- 
\:插入\字符
- 
\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命令
- 
功能:默认接受键盘的输入,回车符代表输入结束 
- 
应用场景:人机交互 
- 
命令选项 - 
-p:打印信息
- 
-t:限定时间
- 
-s:不回显(一般使用在输入密码的时候)
- 
-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
- $?判断上一条命令是否执行成功,如果是0就执行成功,如果是非0就没有执行成功
 
                   
                   
                   
                   
                             
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   1411
					1411
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            