一.变量
shell中变量的类型
1)本地变量(局部变量)
2)环境变量(全局变量)
3)位置变量
4)特殊变量
1.本地变量
也叫自定义变量,用户根据自己的需求自己定义的变量
作用域(作用范围):在整个shell脚本中生效;如果是在命令行定义的变量,作用范围就是当前shell。
定义变量: 变量名=变量值 定义本地变量
注意:等号两边一定不能有空格
[root@shell ~]
[root@shell ~]
mary
[root@shell ~]
[root@shell ~]
3
[root@shell ~]
[root@shell ~]
exit
[root@shell ~]
2
2.环境变量
作用范围:当前shell及其子shell
定义环境变量:
1)将已经定义的本地变量导出成环境变量 export
[root@shell ~]
[root@shell ~]
mary
[root@shell ~]
[root@shell ~]
mary
2)在定义变量时,直接将其定义为环境变量
[root@shell ~]
2
[root@shell ~]
[root@shell ~]
[root@shell ~]
88
3)declare -x name 定义环境变量
注意:在子shell中修改变量的值,不影响父shell中的变量的值的。
[root@shell ~]
3
[root@shell ~]
[root@shell ~]
66
[root@shell ~]
exit
[root@shell ~]
88
如果想让环境变量永久生效,那么就写在环境变量配置文件中即可。
取消变量的值
[root@shell ~]# unset name
[root@shell ~]# echo $name
3.位置变量
[root@shell ~]# ls /root /tmp
ls —— $0
/root —— $1
/tmp —— $2
[root@shell ~]
[root@shell ~]
#!/bin/bash
echo '$0='$0
echo '$1='$1
echo '$2='$2
echo '$3='$3
echo '$4='$4
echo '$5='$5
echo '$6='$6
echo '$7='$7
echo '$8='$8
echo '$9='$9
echo '$10='$10
echo '$11='${11}
echo '$#='$#
echo '$*='$*
echo '$@='$@
[root@shell ~]
[root@shell ~]
$0=./position.sh
$1=a
$2=b
$3=c
$4=d
$5=e
$6=f
$7=g
$8=h
$9=i
$10=a0
$11=k
$#=13 // 参数的个数
$*=a b c d e f g h i j k l m //打印参数列表
$@=a b c d e f g h i j k l m
$0 —— 表示当前运行的脚本或者命令本身
$1 ~ ${10} —— 表示脚本的位置参数,$1表示第一个参数,依此类推
$# —— 表示位置参数的个数
$@和$* —— 表示参数的列表
4.特殊变量
$$ 查看当前shell的pid
[root@shell ~]# echo $$
!$和$_
上一条命令的最后一个参数
[root@shell ~]# vim filename
[root@shell ~]# cat !$
或者 alt+.(点) 也可以
$?:上一条命令的执行状态的返回值
执行状态返回值(0-255),分两类
0:表示上一条命令执行成功
非0:表示上一条命令执行失败
5.变量的引用
1、$变量名
echo $变量名
2、${变量名} —— 为了防止歧义
[root@shell ~]
[root@shell ~]
There are some .
[root@shell ~]
There are some bananas.
二.算术运算
1、$[] 和 $(())
[root@shell ~]
3
[root@shell ~]
3
[root@shell ~]
65536
2、let 常用于while循环变量更新
let 变量=值
[root@shell ~]
[root@shell ~]
3
[root@shell ~]
[root@shell ~]
[root@shell ~]
[root@shell ~]
40
[root@shell ~]
3、Linux计算器
[root@shell ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
5/6
0
scale=3 //指定精度,精度就是小数点后保留几位小数
9/8
1.125
ctrl + d 退出
三.脚本编程
1、使用shell脚本的原因
1)功能比较强大,可以移植
2)节省时间,提高工作效率,可以重复执行命令
2、shell脚本的好处
减少重复性工作,提升效率
3、组成shell脚本的元素 即shell脚本基本格式
#!/bin/bash —— 顶格写 shabang,也称为幻数,用来指明脚本中的命令是由什么环境来解析的
perl: #!/usr/bin/perl
python:#!/usr/bin/python
一行到多行的注释行 以#开头的
注释里面写:作者、编写时间、更新时间、脚本的功能介绍等等
4、shell脚本的调试
1)对脚本整体进行调试
sh -x 脚本的名字 //-x:会将脚本执行过程中每一行都打印到标准输出
2)对脚本的局部调试
set -x //开启调试功能
set +x //关闭调试功能
[root@shell ~]
[root@shell ~]
#!/bin/bash
for i in $(seq 5)
do
echo $i
done
[root@shell ~]
[root@shell ~]
#!/bin/bash
for i in $(seq 5)
do
set -x
echo $i
echo hello $i
set +x
done
[root@shell ~]
5、脚本的运行
1)脚本编写完成,添加执行权限,使用相对路径或者绝对路径的方式运行脚本
[root@shell ~]
bash: ./sc1.sh: Permission denied
[root@shell ~]
[root@shell ~]
2)编写完成,使用sh或者bash命令运行脚本(可以没有执行权限)
[root@shell ~]# sh sc1.sh //有无执行权限均可
6、简单的小脚本
脚本:命令的堆砌,加上流程控制语句
[root@shell ~]
#!/bin/bash
free -m
df -h
date
四.读取变量
read:能够从标准输入读取用户输入的值,然后传递给脚本中的变量
echo:打印变量值、打印字符串等
-e:让echo支持以下符号
\t:tab
\n:换行
[root@shell ~]# echo -e "hello\tworld\nhello everyone"
hello world
hello everyone
-n:不换行
1、read读取用户输入
[root@shell ~]
#!/bin/bash
echo -n "Please input the username you want to add: "
read username //read 变量名
useradd $username && echo "user $username added."
[root@shell ~]
Please input the username you want to add: Loyal-Wang
user Loyal-Wang added.
2、read 自身显示提示信息 -p 打印提示的 —— prompt:提示
[root@shell ~]
[root@shell ~]
#!/bin/bash
read -p "Please input the username you want to add: " username //read -p 提示信息 变量名
useradd $username && echo "user $username added." //提示信息和变量名之间必有空格
[root@shell ~]
Please input the username you want to add: doushuine
user doushuine added.
3、read 不回显用户输入的信息 -s
[root@shell ~]
[root@shell ~]
#!/bin/bash
read -p "Please input the username you want to add: " username
read -s -p "Please input the password you want to set: " password
echo //换行
useradd $username && echo "user $username added."
echo $password | passwd --stdin $username &>/dev/null && echo "password set successfully."
[root@shell ~]
Please input the username you want to add: taa
Please input the password you want to set:
user taa added.
password set successfully.
echo:可以用来打印空行或者换行。
4、限制读取时间 -t
[root@shell ~]
[root@shell ~]
#!/bin/bash
read -p "Please input the username you want to add: " -t 5 username //单位是秒
read -s -p "Please input the password you want to set: " password
echo "***"
useradd $username && echo "user $username added."
echo $password | passwd --stdin $username &>/dev/null && echo "password set successfully."
read:
-p:打印提示信息
-s:不回显用户输入的信息
-t 时间:限制读取输入的等待时间
-n 数字:输入指定的字符个数
五.bash的配置文件:
全局配置
/etc/profile, /etc/profile.d/*.sh, /etc/bashrc
个人配置
~/.bash_profile, ~/.bashrc
profile类的文件:
设定环境变量
运行命令或脚本
bashrc类的文件:
设定本地变量
定义命令别名