Shell
Shell的作用
概念
充当”命令解释器“
负责接收用户输入的操作指令并进行解释
Shell脚本
将平时使用的各种Linux命令按顺序保存到一个文本文件中
为其添加可执行权限,即为Shell脚本
批量处理的自动化过程
应用场景
重复性操作
交互性任务
批量事物处理
服务运行状态监控
定时任务执行
使用Shell编写简单脚本
权限不够:chmod +x 脚本文件
Shell文件所在位置 : /etc/shells
查看当前所使用的Shell :
echo $SHELL
printf $SHELL
编写脚本代码
使用vim文本编辑器
每行一条Linux命令,按执行顺序依次写入
执行脚本
创建
vi kgc.sh 创建一个shell脚本
vi kgc.ps 创建一个爬虫脚本
执行
bash kgc.sh
sh kgc.sh
调用脚本路径执行
绝对路径访问
[root@bogon ~]# /root/kgc.sh
-bash: /root/kgc.sh: 权限不够
[root@bogon ~]# chmod +x kgc.sh
[root@bogon ~]# /root/kgc.sh
你好
相对路径访问
[root@bogon ~]# ./kgc.sh
你好
其他常用访问方式
[root@bogon ~]# . kgc.sh
你好
[root@bogon ~]# source kgc.sh
你好
规范
在第一行声明解释器
#!/bin/bash
echo "你好"
重定向
交互式硬件设备
标准输入:从该设备接收用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:通过该设备报告执行出错信息
类型 | 设备文件 | 文件描述编号 | 默认设备 |
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输入 | /dev/stderr | 2 | 显示器 |
重定向与管道操作
类型 | 操作符 | 用途 |
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | > | 将输出结果保存到指定的文件(覆盖原有内容) |
>> | 将输出结果追加到指定的文件尾部 | |
标准错误输出 | 2> | 将错误信息保存到指定文件(覆盖原有内容) |
2>> | 将错误信息追加到指定文件中 | |
混合输出 | &> | 将标准输出、标准错误的内容保存到同一文件中 |
管道操作符号“|”
将左侧的命令输出结果,作为右侧命令的处理对象
变量
变量的作用
用来存放系统和用户需要使用的特定参数(值)
变量名:使用固定的名称,由系统预设或用户定义
变量值:能够根据用户设置,系统环境的变化而变化
定义一个新的变量
变量名以字母或下划线开头,区分大小写,建议全大写
声明 name=student
查看变量的值
调用 echo ${name}
{} :界定定位符(明确变量的边界)
单引号与双引号的作用: 界定特殊字符,单引号会直接输出引号的内容,双引号则是大多数字符都被视为普通字符,但有几个字符具有特殊意义,双引号内的变量和命令会被shell解释或执行,并替换为它们的结果
变量的类型
自定义变量:由用户自己定义,修改和使用。不能有空格,除非用引号包含
特殊变量:环境变量,只读变量,位置变量,预定义变量
环境变量
由系统提前创建,用来设置用户的工作环境
配置文件:/etc/profile、~/.bash_profile
常见的环境变量
SHELL USER LANG PATH
PATH :编写的脚本想要当命令使用,可以放到该命令下的任意路径下
只读变量
把变量设置为只读,一经设置,不能删除,不能修改,只能调用
declare
命令也可以用来声明只读变量,使用-r
readonly 变量名
变量在脚本编程中特别有用,因为它们可以防止变量被意外地修改,从而增加脚本的健壮性和可维护性
预定义变量
有一些预定义的变量(也称为特殊变量或内置变量),这些变量提供了关于脚本执行环境的信息,例如脚本的参数、脚本的退出状态、当前进程的PID等。这些变量通常都以大写字母表示,以区别于用户定义的变量
[root@bogon ~]# cat kgc.sh
#!/bin/bash
echo "你好"
echo "'$'0是:$0"
echo "第一个参数是:$1"
echo "第一个参数是:$2"
[root@bogon ~]# ./kgc.sh aa bb
你好
'$'0是:./kgc.sh
第一个参数是:aa
第一个参数是:bb
[root@bogon ~]#
常见的预定义变量
所有参数 $*
所有参数的个数 $#
$0 :当前执行的进程/程序名
$?: 上一条命令执行后返回的状态,当返回状态值为0时,表示执行正常,非0值表示执行异常或出错
把命令执行结果赋给变量名
``反撇号:
[root@bogon ~]# cat test.txt
wangwu
lisi
zhanglong
zhaohu
[root@bogon ~]# name=`cat test.txt`
[root@bogon ~]# echo $name
wangwu lisi zhanglong zhaohu
()小括号也具有相同作用
[root@bogon ~]# name=$(cat test.txt)
[root@bogon ~]# echo $name
wangwu lisi zhanglong zhaohu
[root@bogon ~]#
计算
expr 可以用于计算,值得注意的是命令之间要有空格
[1 + 1] :同样可以计算,但是不输出结果,通常配合echo 打印
echo $[1 + 1]
((1 - 1)) :同样可以计算