文章目录
一、Shell初识
Shell脚本(英语:Shell script),又称Shell命令稿、程序化脚本,是一种电脑程序与文本文件,内容由一连串的shell命令组成,经由Unix Shell直译其内容后运作。被当成是一种脚本语言来设计,其运作方式与直译语言相当,由Unix shell扮演命令行解释器的角色,在读取shell脚本之后,依序运行其中的shell命令,之后输出结果。利用shell脚本可以进行系统管理,文件操作等。
1、格式
在创建shell脚本时,必须在第一行指定要使用的shell,其格式为:
#!/bin/bash
(#):用作注释行,第一行是个列外,#后面的惊叹号会告诉shell用哪个shell来运行脚本,这里是可以使用bash
shell脚本的后缀一般是 sh结尾,写在shell里面的命令是按照行,从上往下执行的。
2、执行和调试
1)要加上执行权限。
chmod +x test.sh
用点号(.)执行,如 ./test.sh
或者:sh test.sh
假如使用sh命令执行脚本文件,可以没有+x 和 第一行解释器#!/bin/bash
假如不是使用sh命令,那么需要+x 且 第一行需要添加解释器#!/bin/bash
2)三种常见的调试
在命令行提供参数
[root@vm01 test]# sh -x test.sh #是debug模式
在脚本开头提供参数
#! /bin/sh -x
在脚本中用set命令启用或禁用参数
#! /bin/sh
if [ -z "$1" ]; then
set -x
echo "ERROR: Insufficient Args."
exit 1
set +x
fi
set -x和set +x分别表示启用和禁用-x参数,这样可以只对脚本中的某一段进行跟踪调试。
3、echo
echo命令后面可以加上字符串,输入到控制台,可以用单引号或双引号划定文本字符串。
echo "hello\n\n"
echo -e "hello\n\n"
echo "hello"
echo -n "hello"
4、变量
1)定义变量:变量名不加美元符号($)
your_name=“11hao”
注意,变量名和等号之间不能有空格
DATE=`date` #这种是动态变量
除了显式地直接赋值,还可以用语句给变量赋值,如:
for file in `ls /etc` #后面的 ls /etc引用的符号不是单引号,是数字1前面那个键。是用来动态获取命令执行后的结果的。
2)使用变量
your_name=“qinjx”
#两种方式均可
echo $your_name
echo ${your_name} #加花括号是为了帮助解释器识别变量的边界
如:echo ${your_name} what
3)给变量传递参数
$1,$2,$3等,在shell代表传递的参数顺序
[root@vm01 test]# sh test.sh 11 hao
5、注释
以“#”开头的行就是注释,会被解释器忽略。
sh里没有多行注释,只能每一行加一个#号
6、字符串
字符串是shell编程中最常用最有用的数据类型
字符串可以用单引号,也可以用双引号,也可以不用引号
单引号字符串的限制:
·单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
·单引号字串中不能出现单引号(对单引号使用转义符后也不行)
1)字符串操作
拼接字符串
your_name=“11hao”
greeting=“hello, “$your_name” !”
greeting_1=“hello, ${your_name} !”
echo $greeting $greeting_1
获取字符串长度
string=“abcd”
echo ${#string} #输出:4
提取子字符串
string=“alibaba is a great company”
echo ${string:1:4} #输出:liba
7、转义符
用反斜杠可以转移shell里面的一些特殊的符号,比如说要正确打印$符号,那么在前面加一个反斜杠即可。
8、date日期函数
按照格式输出:
today=$(date +%y%m%d)
或者
today=`date +%y%m%d`
9、管道
可以通过 | 把一个命令的输出传递给另一个命令做输入。
提示:awk里面的$1,表示输出第一列
df -k | awk ‘{print $1}’ | grep -v “文件系统”
10、tee
tee命令把结果输出到标准输出,且生成一个副本到相应文件。
tee -