别着急,坐和放宽
UNIX的哲学:一条命令只做一件事情
为了组合命令和多次执行,可以使用脚本文件保存需要执行的命令
单行执行多条命令,使用;
分隔
cd /var ; ls ; du *
执行前,需要赋予脚本文件可执行权限
chmod u+x 脚本文件名
.sh
#
, 一般写在命令上一行,不推荐写在命令后面bash ./file.sh 在终端下产生一个子进程再去运行bash解释器执行脚本
./file.sh
在终端下产生一个子进程再去运行脚本中第一行指定的解释器执行脚本
source ./file.sh
在当前进程中执行脚本
输入重定向
<
read var < /path/to/file
输出重定向
>
, >>
,2>
,&>
echo 123 > /path/to/file
输入和输出组合使用
定义
赋值
a=123
letc=$(ls -l /etc)
name="macro zhang"
引用
作用范围
export
unset
系统环境变量
预定义变量
位置变量
su - root
su root
source 环境变量文件
加载定义数组
ips=(192.168.10.1 192.168.10.2 192.168.10.3)
显示数组所有元素
显示数组元素个数
显示数组的第一个元素
#!/bin/bash
vim 2.sh
#!/bin/bash
cd /tmp
pwd
chmod u+x 2.sh
# 下面三种方式执行脚本后观察当前终端中路径是否切换到/tmp,为什么?
bash 2.sh
./2.sh
source 2.sh
# 多行
cat > /path/to/file << EOF
多行文本内容
EOF
# 例如
cat > /etc/yum.repos.d/aaa.repo << EOF
[centos]
name=centos
baseurl=http://1.1.1.1/centos
gpgcheck=0
enable=1
EOF
# 如果命令是交互式的,在脚本里面可以采用下面方式
echo "888888"| passwd --stdin $USER
# 单行
echo "hello" > /path/to/file
env | more
set | more
echo $USER
echo $PATH # 系统命令的当前搜索路径
vim 3.sh
#!/bin/bash
pos1=$1
pos2=${2-_} # 当没有第二个参数的时候,自动设置为_
echo $pos1
echo $pos2
chmod u+x 3.sh
./3.sh -a -l
echo ${ips[@]}
echo ${#ips[@]}
echo $ips
echo ${ips[0]}