shell脚本的基本写法
#! 指定解释器
#! /bin/bash
#脚本的基本信息的描述
#Name: 名称
#Desc: 描述
#Path: 存放路径
#Usage: 用法
#Update: 更新时间
echo "hello godv"
echo "hello godv"
echo "hello godv"
查看脚本执行过程 bash -x godv.sh
godv@godv-OptiPlex-7070:~/godv/godv_shell$ bash -x godv.sh
+ echo 'hello godv'
hello godv
+ echo 'hello godv'
hello godv
+ echo 'hello godv'
hello godv
查看脚本语法问题 bash -n godv.sh
试炼
#! /bin/bash
echo "godv::start"
#删除
rm -rf /home/godv/godv/godv_shell/shell_test/*
#创建文件夹
mkdir /home/godv/godv/godv_shell/shell_test/dir{1..3}
#拷贝
cp -r /home/godv/Downloads /tmp/dir1
#打印时间
echo "$(date +'%F %T') godv::success "
变量 变量名=变量值 取消变量unset A
变量名区分大小写(建议大写)
变量名不能包含特殊符号
空格字符串 A="hello godv"
变量名不能以数字开头
等号两边不能有空格
godv@godv-OptiPlex-7070:~/godv/godv_shell/shell_test/dir1$ A=godv
godv@godv-OptiPlex-7070:~/godv/godv_shell/shell_test/dir1$ echo $A
godv
godv@godv-OptiPlex-7070:~/godv/godv_shell/shell_test/dir1$ A=woda
godv@godv-OptiPlex-7070:~/godv/godv_shell/shell_test/dir1$ echo ${A}
woda
godv@godv-OptiPlex-7070:~/godv/godv_shell/shell_test/dir1$ unset A
godv@godv-OptiPlex-7070:~/godv/godv_shell/shell_test/dir1$ echo $A
echo ${A:1:3} 在A变量中 从第1位开始截取3位
godv@godv-OptiPlex-7070:~/godv/godv_shell/shell_test/dir1$ echo ${A:1:3}
234
赋值
godv@godv-OptiPlex-7070:~$ A=$(hostname)
godv@godv-OptiPlex-7070:~$ echo $A
godv-OptiPlex-7070
read [选项] 变量名
-p 定义提示用户信息
-s 密码
-t 显示输入时间
-n 限制长度
godv@godv-OptiPlex-7070:~$ read name
godv
godv@godv-OptiPlex-7070:~$ echo $name
godv
godv@godv-OptiPlex-7070:~$ read -p name
name
godv@godv-OptiPlex-7070:~$ read -p "input you name:" name
input you name:name
godv@godv-OptiPlex-7070:~$ echo $name
name
godv@godv-OptiPlex-7070:~$ read -s -p "input you password:" pass
input you password:godv@godv-OptiPlex-7070:~$ echo $pass
123456
godv@godv-OptiPlex-7070:~$ read -n 5 -p "name:" name
name:hhhhhgodv@godv-OptiPlex-7070:~$ echo $name
hhhhh
godv@godv-OptiPlex-7070:~$ read -t 3 -p "3s" name
3sgodv@godv-OptiPlex-7070:~$
变量值来自文件
godv@godv-OptiPlex-7070:~$ read -p "input you ip address:" ip < ip.txt
godv@godv-OptiPlex-7070:~$ echo $ip
192.168.97.45
有类型的变量
declare [选项] 变量名=变量值
-i 整数
-r 只读/不可修改
-a 定义/查看 数组
-A 定义/查看 关联数组
-x 将变量通过环境导出
godv@godv-OptiPlex-7070:~$ declare -i B=456
godv@godv-OptiPlex-7070:~$ echo $B
456
godv@godv-OptiPlex-7070:~$ B=godv
godv@godv-OptiPlex-7070:~$ echo $B
0
godv@godv-OptiPlex-7070:~$ declare -r C=godv
godv@godv-OptiPlex-7070:~$ echo $C
godv
godv@godv-OptiPlex-7070:~$ C=goda
bash: C: 只读变量
godv@godv-OptiPlex-7070:~$ unset B
godv@godv-OptiPlex-7070:~$ unset C
bash: unset: C: 无法取消设定: 只读 variable
godv@godv-OptiPlex-7070:~$ AAA=godv
godv@godv-OptiPlex-7070:~$ export AAA
godv@godv-OptiPlex-7070:~$ env | grep "AAA"
AAA=godv
godv@godv-OptiPlex-7070:~$ declare -x BBB=goda
godv@godv-OptiPlex-7070:~$ env | grep "BBB"
BBB=goda
本地变量:用户自定义的变量 当前进程有效 / 子进程无效
环境变量 /etc/profile: 当前进程有效 / 子进程有效
env 查看当前用户的 环境变量
set 查看当前用户的 所有变量(临时/环境)
declare -x BBB=goda 定义环境变量
export AAA=godv 定义环境变量
全局变量:所有进程 / 所有用户 在下列文件被修改后都需要重新 source 使其生效
当前用户
$HOME/.bashrc 当前用户的bash信息,用户登录时读取 定义别名、umask、函数
$HOME/.bash_profile 当前用户的环境变量,用户登录时读取
$HOME/.bash_logout 当前用户退出当前shell时最后读取 定义用户退出时执行的程序
全局
/etc/bashrc 全局的bash信息,所有用户生效 定义别名、umask、函数
/etc/profile 全局环境变量信息,系统和所有用户生效