一、什么是Shell?
shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包括ls、cd、pwd等等。总结来说,Shell是一个命令解释器,它通过接受用户输入的Shell命令来启动、暂停、停止程序的运行或对计算机进行控制。
二、什么是脚本?
脚本就是由Shell命令组成的文件,这些命令都是可执行程序的名字,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。
三、Linux中有哪些脚本解释器?
有dash和bash两种,但dash没有bash功能全面,所以通常使用bash。
可以通过命令来查看系统中的脚本解释器: ls -l /bin/*sh
注意:执行之前首先要为脚本文件添加可执行权限,不然就得用root权限才能执行!
添加可执行权限: chmod +x name.sh 回车
四、shell脚本的执行方式
1) ./name.sh 这种方式脚本第一行一定要加#!/bin/bash
2) /bin/bash name.sh
3) bash name.sh
4) sh name.sh
在编译的时候用空格分割 依次传入参数 ./name.sh 1234 abcd 参数1 参数2
shell 脚本 常用参数
#!/bin/sh # 在脚本第一行脚本头 # sh为当前系统默认shell,可指定为bash等shell sh -x # 执行过程 sh -n # 检查语法 (a=bbk) # 括号创建子shell运行 basename /a/b/c # 从全路径中保留最后一层文件名或目录 dirname # 取路径 $RANDOM # 随机数 $$ # 进程号 source FileName # 在当前bash环境下读取并执行FileName中的命令 # 等同 . FileName sleep 5 # 间隔睡眠5秒 trap # 在接收到信号后将要采取的行动 trap "" 2 3 # 禁止ctrl+c $PWD # 当前目录 $HOME # 家目录 $OLDPWD # 之前一个目录的路径 cd - # 返回上一个目录路径 local ret # 局部变量 yes # 重复打印 yes |rm -i * # 自动回答y或者其他 ls -p /home # 区分目录和文件夹 ls -d /home/ # 查看匹配完整路径 time a.sh # 测试程序执行时间 echo -n aa;echo bb # 不换行执行下一句话 将字符串原样输出 echo -e "s\tss\n\n\n" # 使转义生效 echo $a | cut -c2-6 # 取字符串中字元 echo {a,b,c}{a,b,c}{a,b,c} # 排列组合(括号内一个元素分别和其他括号内元素组合) echo $((2#11010)) # 二进制转10进制 echo aaa | tee file # 打印同时写入文件 默认覆盖 -a追加 echo {1..10} # 打印10个字符 printf ‘%10s\n‘|tr " " a # 打印10个字符 pwd | awk -F/ ‘{ print $2 }‘ # 返回目录名 tac file |sed 1,3d|tac # 倒置读取文件 # 删除最后3行 tail -3 file # 取最后3行 outtmp=/tmp/$$`date +%s%N`.outtmp # 临时文件定义 :(){ :|:& };: # 著名的 fork炸弹,系统执行海量的进程,直到系统僵死 echo -e "\e[32m颜色\e[0m" # 打印颜色 echo -e "\033[32m颜色\033[m" # 打印颜色 echo -e "\033[0;31mL\033[0;32mO\033[0;33mV\033[0;34mE\t\033[0;35mY\033[0;36mO\033[0;32mU\e[m" # 打印颜色
if语句的使用
一、比较数字的大小----双括号
二、判断目录是否存在 -d
三、判断文件是否存在
四、多个if判断
逻辑运算符解析:
逻辑运算符解析: -f 判断文件是否存在 eg: if [ -f filename ] -d 判断目录是否存在 eg: if [ -d dir ] -eq 等于 应用于:整型比较 -ne 不等于 应用于:整型比较 -lt 小于 应用于:整型比较 -gt 大于 应用于:整型比较 -le 小于或等于 应用于:整型比较 -ge 大于或等于 应用于:整型比较 -a 双方都成立(and) 逻辑表达式 –a 逻辑表达式 -o 单方成立(or) 逻辑表达式 –o 逻辑表达式 -z 空字符串