shell编程基础
1、为什么要学shell编程?
linux系统中会大量得使用shell,工作中也需要自动化来实现业务。比如:自动备份、监控、批量安装服务等。
shell编程时linux运维人员必须要会得编程语言。最简单得变成语言。
编程也是运维人员必须具备得本领: shell 、Python
2、什么时shell?
shell就是一个解释器(翻译官),命令行得命令以及脚本都会通过shell解释,传给操作系统,处理后在输出给客户。shell是创建用户时,系统指定 得翻译官。
3、shell的分类
1.Bourne shell
Bourne shell又包括Bourne shell (sh)、Korn shell (ksh)、Bourne Again Shell(bash)三种类型。
2. C shell
C shell又包括csh、tcsh两种类型。
C7支持得shell
[root@oldboyedu ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
4、C7默认的shell
/bin/bash
5、什么是shell脚本?
程序、命令放入文件里执行,这个文件称之为shell脚本文件。
工作中最多的编写脚本,存放在文件里。
6、shell 的变量:
a. 全局变量(环境变量)
在整个系统中生效、一般是大写、系统中默认存在一些这样的变量,用于满足系统和程序运行的需求。
1.系统自带的环境变量:
[root@oldboyedu ~]# echo $PS1
[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\]\w\[\e[0m\]]\$
[root@oldboyedu ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@oldboyedu ~]# echo $HOME
/root
2.自定义环境变量:
方法一
export OLDBOY="I am oldboy."
方法2:
OLDBOY="I am oldboy."
export OLDBOY
[root@oldboyedu ~]# export OLDBOY="I am oldboy."
[root@oldboyedu ~]# echo $OLDBOY
I am oldboy.
/etc/profile ==> ~/.bash_profile ===>~/.bashrc ==>/etc/bashrc
推荐以后把环境变量放入/etc/bashrc
安装java服务的时候就会配置环境变量。
b. 局部变量(普通变量)
是编写shell脚本最常用的变量。
变量名=值
例如:a = 1
要求:
变量名:数字、字母、下划线,不能是数字开头。
= 等号: 赋值符,把什么东西给谁。 赋值符两边不能有空格
值 :东西,变量内容。
引用内容的符号:单引号、双引号、反引号、不加引号
以下举例说明:
[root@oldboyedu ~]# a=1
[root@oldboyedu ~]# echo $a
1
[root@oldboyedu ~]# y=$x+1
[root@oldboyedu ~]# echo $y
1+1
[root@oldboyedu ~]# y="$x+1"
[root@oldboyedu ~]# echo $y
1+1
[root@oldboyedu ~]# y='$x+1'
[root@oldboyedu ~]# echo $y
$x+1
[root@oldboyedu ~]# y=`$x+1`
-bash: 1+1: command not found
[root@oldboyedu ~]# let y="$x+1" #<==让括号的内容进行计算。
[root@oldboyedu ~]# echo $y
2
[root@oldboyedu ~]# a=1
[root@oldboyedu ~]# echo ${a}b
1b
7、表达式
[ ] 中括号表达式,中括号两端必须要有空格。
字符串要加双引号
[root@oldboyedu ~]# [ "a" = "b" ] && echo 1||echo 0
0
整数表达式:
> -gt
>= -ge
< -lt
<= -le
= -eq
不等于 -ne
例如:
[root@oldboyedu ~]# a=5
[root@oldboyedu ~]# echo $a
5
[root@oldboyedu ~]# [ $a -gt 3 ] && echo 1||echo 0
1
[root@oldboyedu ~]# [ $a -ge 5 ] && echo 1||echo 0
1
[root@oldboyedu ~]# [ $a -lt 5 ] && echo 1||echo 0
0
[root@oldboyedu ~]# [ $a -le 5 ] && echo 1||echo 0
1
[root@oldboyedu ~]# [ $a -ne 5 ] && echo 1||echo 0
0
注意点:
1)整数表达式符 两端要有空格
2)中括号里面两端要有空格。
3)变量和比较的内容,不需要加引号
字符表达式:
-z 变量内容长度为0时,为真(表达式正确的意思)。zero
-n 变量内容长度不为0时,为真(表达式正确的意思)。 not zero
a == a 字符串是否相同
说明:
1) 字符要加双引号
例子:
[root@oldboyedu ~]# oldboy="I am oldboy"
[root@oldboyedu ~]# [ -z "$oldboy" ] && echo 1 || echo 0
0
[root@oldboyedu ~]# oldboy=""
[root@oldboyedu ~]# [ -z "$oldboy" ] && echo 1 || echo 0
1
[root@oldboyedu ~]# [ -n "$oldboy" ] && echo 1 || echo 0
0
[root@oldboyedu ~]# [ "test" == "host" ] && echo 1 || echo 0
0
[root@oldboyedu ~]# [ "test" == "test" ] && echo 1 || echo 0
1
8、shell 判断句:
1.if 判断句语法:
if [ 表达式 ]
then 命令
fi
2.实现多条件:
if [ $(date +%w) -eq 6 ]||[ $(date +%w) -eq 0 ]
then
echo "一起去旅游"
else
echo "还是好好上课吧"
fi
3.read 命令
交互式读取用户输入
-p ”提醒:“
-t ”多长时间内等待输入“
4.简单举例说明:
[root@oldboyedu ~]# read -p "请输入一句话:" boy ====》写好脚本执行后的结果
请输入一句话:老男孩
[root@oldboyedu ~]# echo $boy
老男孩
9、for 循环
1.语法格式:
for n in 取值列表
do
执行命令
done
2.例子:
[root@oldboyedu ~]# cat for1.sh ====》脚本内容
for n in 1 2 3 4 5
do
echo $n
done
[root@oldboyedu ~]# sh for1.sh =====》运行脚本后输出内容
1
2
3
4
5
[root@oldboyedu ~]# sh -x for1.sh======》 显示执行过程
+ for n in 1 2 3 4 5
+ echo 1
1
+ for n in 1 2 3 4 5
+ echo 2
2
+ for n in 1 2 3 4 5
+ echo 3
3
+ for n in 1 2 3 4 5
+ echo 4
4
+ for n in 1 2 3 4 5
+ echo 5
5
书写脚本的习惯:
1、以 .sh结尾
2、脚本开头第一行 #!/bin/bash 脚本内容有谁解释。
由于linux 下默认是bash ,所以也可以不写这一行
网友评论