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.sh
123
-
>>
:重定向追加输出,在原数据的末尾添加。如: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~
-
<
:重定向输入,如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就没有执行成功