[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
type [命令] 可以查看是内部命令还是外部命令
[root@localhost ~]# type ping
ping 是 /usr/bin/ping
[root@localhost ~]# type cd
cd 是 shell 内嵌
使用vim文本编辑器
每行一条Linux命令,按执行顺序依次编写
脚本后缀为.sh
vim test.sh
#!/bin/bash shell脚本标准格式
cd /boot/
pwd
ls -lh vml*
grep 过滤
sed 按行读取
awk 按列读取
方法 | 权限区别 | 环境变量区别 |
---|---|---|
脚本文件路径 | 必须有执行权限 | 不变 |
sh 脚本文件路径 | 不需要执行权限 | 不变 |
脚本文件路径 / . 脚本文件路径 | 不需要执行权限 | 变 |
方法一
[root@localhost ~]# ./test.sh
bash: ./test.sh: 权限不够
方法二
[root@localhost ~]# sh test.sh
/boot
-rwxr-xr-x. 1 root root 6.4M 7月 9 20:21 vmlinuz-0-rescue-ecc394a38fa54a59b5c4240d3379427e
-rwxr-xr-x. 1 root root 6.4M 11月 9 2018 vmlinuz-3.10.0-957.el7.x86_64
方法三
[root@localhost ~]# source test.sh
/boot
-rwxr-xr-x. 1 root root 6.4M 7月 9 20:21 vmlinuz-0-rescue-ecc394a38fa54a59b5c4240d3379427e
-rwxr-xr-x. 1 root root 6.4M 11月 9 2018 vmlinuz-3.10.0-957.el7.x86_64
[root@localhost boot]#
方法四
[root@localhost ~]# . test.sh
/boot
-rwxr-xr-x. 1 root root 6.4M 7月 9 20:21 vmlinuz-0-rescue-ecc394a38fa54a59b5c4240d3379427e
-rwxr-xr-x. 1 root root 6.4M 11月 9 2018 vmlinuz-3.10.0-957.el7.x86_64
[root@localhost boot]#
vim test.sh
#!/bin/bash
#this is a example
cd /boot/
echo "当前所在路径:"
pwd
echo "以vml为开头的文件是:"
ls -lh vml*
[root@localhost ~]# sh test.sh
当前所在路径:
/boot
以vml为开头的文件是:
-rwxr-xr-x. 1 root root 6.4M 7月 9 20:21 vmlinuz-0-rescue-ecc394a38fa54a59b5c4240d3379427e
-rwxr-xr-x. 1 root root 6.4M 11月 9 2018 vmlinuz-3.10.0-957.el7.x86_64
[root@localhost ~]#
类型 | 操作符 | 用途 |
---|---|---|
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | > | 将输出结果保存到指定的文件(覆盖原有内容) |
重定向输出 | >> | 将输出结果追加到指定的文件 |
标准错误输出 | 2> | 将错误信息保存到指定的文件(覆盖原有内容) |
标准错误输出 | 2>> | 将错误信息追加到指定的文件中 |
混合输出 | &> | 将标准输出,标准错误的内容保存到同一个文件中 |
[root@localhost ~]# grep "bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
liu:x:1000:1000:liu:/home/liu:/bin/bash
[root@localhost ~]# grep "bash$" /etc/passwd | awk -F: '{print$1,$3}' 查看以:为分割的第一列和第三列
root 0
liu 1000
[root@localhost ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 50G 5.0G 46G 10% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 13M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 179M 836M 18% /boot
/dev/mapper/centos-home xfs 245G 33M 245G 1% /home
tmpfs tmpfs 378M 4.0K 378M 1% /run/user/42
tmpfs tmpfs 378M 36K 378M 1% /run/user/0
/dev/sr0 iso9660 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
[root@localhost ~]# df -Th |awk '{print$1,$3,$4}' awk 后面不加选项,默认以空格为分割的列
文件系统 容量 已用
/dev/mapper/centos-root 50G 5.0G
devtmpfs 1.9G 0
tmpfs 1.9G 0
tmpfs 1.9G 13M
tmpfs 1.9G 0
/dev/sda1 1014M 179M
/dev/mapper/centos-home 245G 33M
tmpfs 378M 4.0K
tmpfs 378M 44K
/dev/sr0 4.3G 4.3G
标准输入:从该设备接收用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:通过该设备报告执行出错信息
类型 | 设备文件 | 文件描述编号 | 默认设备 |
---|---|---|---|
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
[root@localhost ~]# passwd lisi 2> /boot/tset.sh
[root@localhost ~]# cat /boot/test.sh
cat: /boot/test.sh: 没有那个文件或目录
变量的作用
为灵活管理Linux系统提供特定参数,有两层意思
变量名:使用固定的名称,由系统预设或用户定义
变量值:能够根据用户设置,系统环境的变化而变化
变量的类型
自定义变量:由用户自己定义,修改和使用
环境变量:由系统维护,用于设置工作环境
位置变量:通过命令行给脚本程序传递参数
预定义变量:bash中内置的一类变量,不能直接修改
变量名=变量值
将右边的值赋予左边
查看变量的值:echo $变量名
[root@localhost ~]# number=123
[root@localhost ~]# echo $number
123
[root@localhost ~]# age=20
[root@localhost ~]# echo $number$age
12320
[root@localhost ~]# echo $number $age
123 20
[root@localhost ~]# echo '$number' 单引号和不加符号作用相同
$number
[root@localhost ~]# echo "$number" 相当于echo $
123
[root@localhost ~]# num= `ps aux |wc -l` 反撇号:命令替换,提取命令执行后的输出结果
[root@localhost ~]# echo $num
243
[root@localhost ~]# ps aux | wc -l
242
[root@localhost ~]# echo num
num
[root@localhost ~]# echo $num
243
vim test.sh
#!/bin/bash
#this is a example
read -p "请输入一个整数:" age
echo " 你的年龄:$age"
~
~
[root@localhost ~]# sh test.sh
请输入一个整数:20
你的年龄:20
全局环境变量可用
格式:export 变量名…
[root@localhost ~]# num=`ps aux | wc -l`
[root@localhost ~]# num=`ps aux|wc -l`
[root@localhost ~]# echo $num
240
[root@localhost ~]# bash 设置环境变量范围
[root@localhost ~]# echo $num 不显示
[root@localhost ~]# exit 退出环境变量范围
exit
[root@localhost ~]# echo $num
240
[root@localhost ~]# export num
[root@localhost ~]# bash
[root@localhost ~]# echo $num
240
1)整数变量的运算
expr 变量1 运算符 变量2 [运算符 变量3]…
2)常用运算符
加法运算:+
减法运算:-
乘法运算:\*
除法运算:/
求模(取余)运算:%
注意:乘法*要用转义符
%取余(余数)
5%2=1
取整
5/2=2
[root@localhost ~]# expr 5+ 7
expr: 语法错误
[root@localhost ~]# expr 5 + 7
12
[root@localhost ~]# expr 7 - 2
5
[root@localhost ~]# expr 3 \* 2
6
[root@localhost ~]# expr 9 / 2
4
[root@localhost ~]# expr 9 % 2
1
手动输入自动求和
vim test.sh
#!/bin/bash
#this is a example
read -p "请输入一个整数:" a
echo $a
read -p "请输入一个整数:" b
echo $b
sum=`expr $a + $b`
echo $sum
[root@localhost ~]# sh test.sh
请输入一个整数:5
5
请输入一个整数:7
7
12
环境变量
由系统提前创建,用来设置用户的工作环境
配置文件:/etc/profile,~/.bash_profile
常见的环境变量
PWD,PATH
USER,SHELL,HOME
表示为 $n,n为1-9之间的数字
脚本文件名 one two three four five six seven eight nine
[root@localhost ~]# sh test.sh 12 50
总和为:62
执行的脚本是:test.sh
执行的脚本个数是:2
详细内容时:12 50
#!/bin/bash
#this is a example
sum=0
sum=`expr $1 + $2`
echo "总和为:$sum"
echo "执行的脚本是:$0"
echo "执行的脚本个数是:$#"
echo "详细内容时:$*"
~
为 $n,n为1-9之间的数字
脚本文件名 one two three four five six seven eight nine
[root@localhost ~]# sh test.sh 12 50
总和为:62
执行的脚本是:test.sh
执行的脚本个数是:2
详细内容时:12 50
#!/bin/bash
#this is a example
sum=0
sum=`expr $1 + $2`
echo "总和为:$sum"
echo "执行的脚本是:$0"
echo "执行的脚本个数是:$#"
echo "详细内容时:$*"
~