做网站如何赢利的,济南网站建设 行知科技,什么网络公司比较好,门户网站安全建设方案shell脚本语言的基本结构
shell脚本的用途
自动化常用命令执行系统管理和故障排除创建简单的应用程序处理文本或文件
shell脚本的基本结构
shell脚本编程#xff1a;是基于过程式、解释执行的语言
编程语言的基本结构#xff1a;
各种系统命令的组合数据存储#xff1…shell脚本语言的基本结构
shell脚本的用途
自动化常用命令执行系统管理和故障排除创建简单的应用程序处理文本或文件
shell脚本的基本结构
shell脚本编程是基于过程式、解释执行的语言
编程语言的基本结构
各种系统命令的组合数据存储变量、数组表达式ab控制语句if
shell脚本包含一些命令或声明并符合一定格式的文本文件
格式要求首行shebang机制
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl创建shell脚本过程
第一步使用文本编辑器来创建文本文件
第一行必须包括shell声明序列#!
第二步加执行权限
chmod x hello.sh第三步运行脚本
./hello.sh第一个脚本及运行
#!/bin/bashecho hello world在脚本文件目录下执行
rootsjn:/home# ./hello.sh
hello world在任意一个目录执行
rootsjn:/opt# /home/hello.sh
hello world通过bash来执行
rootsjn:/home# bash ./hello.sh
hello world通过cat和bash来运行
rootsjn:/home# cat hello.sh | bash
hello world通过curl下载远程服务器上脚本在本机上运行
curl http://10.0.0.7/hello.sh | bash通过wget执行
wget -qO - 10.0.0.7/hello.sh | bash变量
变量类型
变量类型
内置变量如PS1PATHUIDHOSTNAMEBASHHISTSIZE用户自定义变量
不同的变量存放的数据不同决定了
数据存储方式参与的运算表示的数据范围
变量的数据类型
字符数值整型、浮点型bash不支持浮点数
Shell中变量命令法则
不能使用程序中保留字如iffor只能使用数字、字母及下划线且不能以数字开头注意不支持短横线-顾名知义用英文名字并体现出实际作用统一命名规则驼峰命名变量名大写局部变量小写函数名小写
变量定义和引用
变量的生效范围等标准划分变量类型
普通变量生效范围为当前shell进程对当前shell之外的其他shell进程包括当前shell的子shell进程均无效环境变量生效范围为当前shell进程及其子进程本地变量生效范围为当前shell进程某代码片段通常指函数
变量赋值
namevaluevalue可以是多种形式
直接字串nameroot
变量引用name$USER
命令引用nameCOMMAND 或者 name$(COMMAND)注变量赋值是临时生效当退出shell时变量会自动删除无法持久保存。脚本中的变量会随着脚本的结束而被删除。
变量引用
$name
${name}例子
rootsjn:/etc/nginx/conf.d# echo $NAME $AGE
sjn 20
rootsjn:/etc/nginx/conf.d# echo $NAME$AGE
sjn20
rootsjn:/etc/nginx/conf.d# echo $NAME_$AGE
20
rootsjn:/etc/nginx/conf.d# echo ${NAME}_$AGE
sjn_20弱引用和强引用
“$NMAE” 弱引用其中的变量引用会被替换为变量值$NAME’强引用其中的变量引用不会被替换为变量值而保持原字符串
rootsjn:/home# echo I am $NAME
I am root
rootsjn:/home# echo I am $NAME
I am $NAME显示已定义变量
set删除变量
unset范例1systeminfo.sh
RED\E[1;31m
GREEN\E[1;32m
END\E[0m
echo -e $GREEN----------------Host systeminfo--------------$END
echo -e HOSTNAME: $REDhostname$END
echo -e IPADDR: $REDifconfig eth0|grep -Eo ([0-9]{1,3}\.){3}[0-9]{1,3} |head -n1$END
echo -e OSVERSION: $REDcat /etc/issue$END
echo -e KERNEL: $REDuname -r$END
echo -e CPU: $REDlscpu | grep Model name | tr -s | cut -d : -f2$END
echo -e MEMORY: $REDfree -h | grep Mem | tr -s : | cut -d : -f2$END
echo -e DISK: $REDlsblk | grep ^sd | tr -s | cut -d -f4$END
echo -e $GREEN---------------------------------------------$END范例2利用变量实现动态命令
rootsjn:~# CMDhostname
rootsjn:~# $CMD
sjn环境变量
可以使子进程包括孙子进程继承父进程的变量但是无法让父进程使用子进程的变量一旦子进程修改从父进程继承的变量将会新的值传递给孙子进程
变量声明和赋值
#一步到位
export nameVALUE
declare -x nameVALUE#分成两步
nameVALUE
export name变量引用
$name
${name}显示所有环境变量
env
printenv
export
declare -xbash内建的环境变量
PATH
SHELL
USER
UID
HOME
PWD
SHLVL #shell的嵌套层数
LANG
MAIL
HOSTNAME
HISTSIZE只读变量
只读变量只能声明定义后续不能修改和删除。
声明只读变量
readonly name
declare -r name查看只读变量
readonly [-p]
declare -r范例
rootsjn:~# readonly PI3.14159
rootsjn:~# echo $PI
3.14159
rootsjn:~# unset PI
-bash: unset: PI: cannot unset: readonly variable
rootsjn:~# echo $PI
3.14159位置变量
位置变量在bash shell中内置的变量在脚本代码中通过命令行传递给脚本的参数。
$1,$2,...,对应第一第二个等参数
$0, 命令本身包括路径
$*, 传递给脚本的所有参数全部参数合为一个字符串
$, 传递给脚本的所有参数全部参数为独立字符串
$#, 传递给脚本的参数的个数
注意$, $*只在被双引号包起来才会存在差异清空所有位置变量
set --范例1arg.sh
echo 1st arg is $1
echo 2st arg is $2
echo 3st arg is $3
echo The number of arg is $#
echo All args are $*
echo All args are $
echo The script of name is basename $0rootsjn:~# ./arg.sh 1 2 3
1st arg is 1
2st arg is 2
3st arg is 3
The number of arg is 3
All args are 1 2 3
All args are 1 2 3
The script of name is arg.sh范例2
rootsjn:~# cat f1.sh
echo f1.sh: args are $*
echo f1.sh: args are $./f2.sh $*
rootsjn:~# cat f2.sh
echo f2.sh: args are $1rootsjn:~# ./f1.sh 1 2 3
f1.sh: args are 1 2 3
f1.sh: args are 1 2 3
f2.sh: args are 1 2 3退出状态码变量
进程执行后将使用变量$?保存状态码的相关数字不同的值表示成功或失败$?取值范围0-255
$?的值为0代表成功
$?的值为1-255代表失败展开命令行
脚本安全和set
格式化输出printf