网站的按钮怎么做 视频,东营网站制作方案,江门建站公司模板,wordpress后台密码忘记怎么办一、运行第一个 Shell 脚本
1.1 Shell 脚本
Shell 脚本#xff08;shell script#xff09;#xff0c;是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本#xff0c;但读者朋友要知道#xff0c;shell 和 shell script 是两个不同的概念。
由…一、运行第一个 Shell 脚本
1.1 Shell 脚本
Shell 脚本shell script是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本但读者朋友要知道shell 和 shell script 是两个不同的概念。
由于习惯的原因简洁起见本文出现的 shell编程 都是指 shell 脚本编程不是指开发 shell 自身。
1.2 Shell 环境
Shell 编程跟 JavaScript、php 编程一样只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多常见的有
Bourne Shell/usr/bin/sh或/bin/shBourne Again Shell/bin/bashC Shell/usr/bin/cshK Shell/usr/bin/kshShell for Root/sbin/sh……
本教程关注的是 Bash也就是 Bourne Again Shell由于易用和免费Bash 在日常工作中被广泛使用。同时Bash 也是大多数Linux 系统默认的 Shell。
在一般情况下人们并不区分 Bourne Shell 和 Bourne Again Shell所以像 #!/bin/sh它同样也可以改为 #!/bin/bash。
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
1.3 运行脚本
打开文本编辑器(可以使用 vi/vim 命令来创建文件)新建一个文件 test.sh扩展名为 shsh代表shell
#!/bin/bash
echo Hello World !
chmod x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本 另一种则是直接运行解释器
/bin/sh test.sh 二、Shell 变量
2.1 变量名规则
注意变量名和等号之间不能有空格这可能和你熟悉的所有编程语言都不一样。同时变量名的命名须遵循如下规则
只包含字母、数字和下划线 变量名可以包含字母大小写敏感、数字和下划线 _不能包含其他特殊字符。不能以数字开头 变量名不能以数字开头但可以包含数字。避免使用 Shell 关键字 不要使用Shell的关键字例如 if、then、else、fi、for、while 等作为变量名以免引起混淆。使用大写字母表示常量 习惯上常量的变量名通常使用大写字母例如 PI3.14。避免使用特殊符号 尽量避免在变量名中使用特殊符号因为它们可能与 Shell 的语法产生冲突。避免使用空格 变量名中不应该包含空格因为空格通常用于分隔命令和参数。
有效的 Shell 变量名示例如下
manhandsome
LD_LIBRARY_PATH/bin/
_var123
var2abc
除了显式地直接赋值还可以用语句给变量赋值如
for file in ls /etc
或
for file in $(ls /etc)
2.2 使用变量
使用一个定义过的变量只要在变量名前面加美元符号即可如
#!/bin/bash
namezhangsan
echo $name
echo ${name}
推荐给所有变量加上花括号这是个好的编程习惯 已定义的变量可以被重新定义
#!/bin/bash
your_nametom
echo $your_nameyour_namealibaba
echo $your_name 2.3 只读变量
使用 readonly 命令可以将变量定义为只读变量只读变量的值不能被改变
#!/bin/bash
your_nametom
echo $your_namereadonly your_name
your_namealibaba
echo $your_name
结果报错 2.4 删除变量
使用 unset 命令可以删除变量
#!/bin/bash
your_nametom
echo $your_nameunset your_name
echo $your_name
删除了值为空 2.5 变量类型
declare 命令
declare 命令用于声明和定义变量的属性如只读、数组、整数等。
常用选项
-a声明数组变量。-A声明关联数组变量。-i声明整数变量。-r声明只读变量。-x声明环境变量类似于 export。-l将变量值转换为小写字母。-u将变量值转换为大写字母。
typeset 命令
typeset 命令在功能上与 declare 相似用于声明和定义变量的属性。在 Bash 中typeset 是 declare 的同义词但在一些其他 Shell 中如 kshtypeset 更常用。 与 declare 的选项基本相同typeset 也支持以下选项
-a声明数组变量。-A声明关联数组变量。-i声明整数变量。-r声明只读变量。-x声明环境变量类似于 export。-l将变量值转换为小写字母。-u将变量值转换为大写字母。
#!/bin/bash
typeset -i num
num66age19
typeset -r agetypeset -l name
nameMORANTtypeset -u sex
sexmantypeset -a array
array(1 2 3)typeset -x export_varHello!typeset -A assoc
assoc[city]Enshi
assoc[fell]goodecho ${num}
echo ${name}
echo ${sex}
echo ${array[1]}
echo ${export_var}
echo ${assoc[city]} 2.6 Shell 字符串
单引号字符串的限制
单引号里的任何字符都会原样输出单引号字符串中的变量是无效的单引号字符串中不能出现单独一个的单引号对单引号使用转义符后也不行但可成对出现作为字符串拼接使用。
双引号的优点
双引号里可以有变量双引号里可以出现转义字符
拼接字符串
#!/bin/bash
namejoker
sayI am $name
echo ${say} 获取字符串长度
#!/bin/bash
namejoker
sayI am $name
echo ${#say} 提取子字符串
#!/bin/bash
namejoker
sayI am $name
echo ${say:0:4} 查找子字符串
#!/bin/bash
namejoker
sayI am $name
echo expr index $say j 反引号的使用反引号用于命令替换将其内部的命令输出作为外部命令的参数。换句话说expr index $say j 的输出将作为 echo 的参数。 expr 命令expr 是一个用于计算表达式的命令支持算术运算、字符串操作等。这里使用的是 index 操作。 index 操作expr index 返回字符串中第一次出现给定字符的位置从1开始计数。 2.7 Shell 数组
读取数组
#!/bin/bash
typeset -a array_num
array_num(1 2 3 4 5)
echo ${array_num[0]}
echo ${array_num[1]}
echo ${array_num[2]}
echo ${array_num[3]}
echo ${array_num[4]}
echo ${array_num[]}
使用 符号可以获取数组中的所有元素 获取数组的长度
#!/bin/bash
typeset -a array_num
array_num(1 2 3 4 5)
length${#array_num[]}
echo $length
length${#array_num[*]}
echo $length
length${#array_num[0]}
echo $length
获取数组长度的方法与获取字符串长度的方法相同 2.8 注释
#--------------------------------------------
# 这是一个注释:EOF
注释内容...
注释内容...
注释内容...
EOF: COMMENT
这是注释的部分。
可以有多行内容。
COMMENT:
注释内容...
注释内容...
注释内容...
:!
注释内容...
注释内容...
注释内容...
!:
这是注释的部分。
可以有多行内容。三、Shell 传递参数
#!/bin/bash
echo 请传递三个参数
echo 执行文件名$0
echo 第一个参数为$1
echo 第一个参数为$2
echo 第一个参数为$3
$0 为执行的文件名包含文件路径 参数处理说明$#传递到脚本的参数个数$*以一个单字符串显示所有向脚本传递的参数。 如$*用「」括起来的情况、以$1 $2 … $n的形式输出所有参数。$$脚本运行的当前进程ID号$!后台运行的最后一个进程的ID号$与$*相同但是使用时加引号并在引号中返回每个参数。 如$用「」括起来的情况、以$1 $2 … $n 的形式输出所有参数。$-显示Shell使用的当前选项与set命令功能相同。$?显示最后命令的退出状态。0表示没有错误其他任何值表明有错误。
#!/bin/bash
echo 请传递三个参数
echo 执行文件名$0
echo 第一个参数为$1
echo 第一个参数为$2
echo 第一个参数为$3
echo 将所有参数作为一个字符串显示$*
echo 脚本当前运行的 ID$$
echo 后台运行的最后一个进程的 ID$!
echo 引号分割所有参数$
echo 显示 Shell 使用的当前选项$-
echo 显示最后命令的退出状态0 表示没有错误$? 四、Shell 基本运算符
4.1 算术运算符
运算符说明举例加法expr $a $b 结果为 30。-减法expr $a - $b 结果为 -10。*乘法expr $a \* $b 结果为 200。/除法expr $b / $a 结果为 2。%取余expr $b % $a 结果为 0。赋值a$b 把变量 b 的值赋给 a。相等。用于比较两个数字相同则返回 true。[ $a $b ] 返回 false。!不相等。用于比较两个数字不相同则返回 true。[ $a ! $b ] 返回 true。
#!/bin/bash
a10
b20valexpr $a $b
echo a b : $valvalexpr $a - $b
echo a - b : $valvalexpr $a \* $b
echo a * b : $valvalexpr $b / $a
echo b / a : $valvalexpr $b % $a
echo b % a : $valif [ $a $b ]
thenecho a 等于 b
fi
if [ $a ! $b ]
thenecho a 不等于 b
fi 4.2 关系运算符
运算符说明举例-eq检测两个数是否相等相等返回 true。[ $a -eq $b ] 返回 false。-ne检测两个数是否不相等不相等返回 true。[ $a -ne $b ] 返回 true。-gt检测左边的数是否大于右边的如果是则返回 true。[ $a -gt $b ] 返回 false。-lt检测左边的数是否小于右边的如果是则返回 true。[ $a -lt $b ] 返回 true。-ge检测左边的数是否大于等于右边的如果是则返回 true。[ $a -ge $b ] 返回 false。-le检测左边的数是否小于等于右边的如果是则返回 true。[ $a -le $b ] 返回 true。
#!/bin/bash
a10
b20if [ $a -eq $b ]
thenecho $a -eq $b : a 等于 b
elseecho $a -eq $b: a 不等于 b
fi
if [ $a -ne $b ]
thenecho $a -ne $b: a 不等于 b
elseecho $a -ne $b : a 等于 b
fi
if [ $a -gt $b ]
thenecho $a -gt $b: a 大于 b
elseecho $a -gt $b: a 不大于 b
fi
if [ $a -lt $b ]
thenecho $a -lt $b: a 小于 b
elseecho $a -lt $b: a 不小于 b
fi
if [ $a -ge $b ]
thenecho $a -ge $b: a 大于或等于 b
elseecho $a -ge $b: a 小于 b
fi
if [ $a -le $b ]
thenecho $a -le $b: a 小于或等于 b
elseecho $a -le $b: a 大于 b
fi 4.3 布尔运算符
运算符说明举例!非运算表达式为 true 则返回 false否则返回 true。[ ! false ] 返回 true。-o或运算有一个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true。-a与运算两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false。
#!/bin/bash
a10
b20if [ $a ! $b ]
thenecho $a ! $b : a 不等于 b
elseecho $a $b: a 等于 b
fi
if [ $a -lt 100 -a $b -gt 15 ]
thenecho $a 小于 100 且 $b 大于 15 : 返回 true
elseecho $a 小于 100 且 $b 大于 15 : 返回 false
fi
if [ $a -lt 100 -o $b -gt 100 ]
thenecho $a 小于 100 或 $b 大于 100 : 返回 true
elseecho $a 小于 100 或 $b 大于 100 : 返回 false
fi
if [ $a -lt 5 -o $b -gt 100 ]
thenecho $a 小于 5 或 $b 大于 100 : 返回 true
elseecho $a 小于 5 或 $b 大于 100 : 返回 false
fi 4.4 逻辑运算符
运算符说明举例逻辑的 AND[[ $a -lt 100 $b -gt 100 ]] 返回 false||逻辑的 OR[[ $a -lt 100 || $b -gt 100 ]] 返回 true
#!/bin/bash
a10
b20if [[ $a -lt 100 $b -gt 100 ]]
thenecho 返回 true
elseecho 返回 false
fiif [[ $a -lt 100 || $b -gt 100 ]]
thenecho 返回 true
elseecho 返回 false
fi 4.5 字符串运算符
运算符说明举例检测两个字符串是否相等相等返回 true。[ $a $b ] 返回 false。!检测两个字符串是否不相等不相等返回 true。[ $a ! $b ] 返回 true。-z检测字符串长度是否为0为0返回 true。[ -z $a ] 返回 false。-n检测字符串长度是否不为 0不为 0 返回 true。[ -n $a ] 返回 true。$检测字符串是否不为空不为空返回 true。[ $a ] 返回 true。
#!/bin/bash
aabc
befgif [ $a $b ]
thenecho $a $b : a 等于 b
elseecho $a $b: a 不等于 b
fi
if [ $a ! $b ]
thenecho $a ! $b : a 不等于 b
elseecho $a ! $b: a 等于 b
fi
if [ -z $a ]
thenecho -z $a : 字符串长度为 0
elseecho -z $a : 字符串长度不为 0
fi
if [ -n $a ]
thenecho -n $a : 字符串长度不为 0
elseecho -n $a : 字符串长度为 0
fi
if [ $a ]
thenecho $a : 字符串不为空
elseecho $a : 字符串为空
fi4.6 文件测试运算符
操作符说明举例-b file检测文件是否是块设备文件如果是则返回 true。[ -b $file ] 返回 false。-c file检测文件是否是字符设备文件如果是则返回 true。[ -c $file ] 返回 false。-d file检测文件是否是目录如果是则返回 true。[ -d $file ] 返回 false。-f file检测文件是否是普通文件既不是目录也不是设备文件如果是则返回 true。[ -f $file ] 返回 true。-g file检测文件是否设置了 SGID 位如果是则返回 true。[ -g $file ] 返回 false。-k file检测文件是否设置了粘着位(Sticky Bit)如果是则返回 true。[ -k $file ] 返回 false。-p file检测文件是否是有名管道如果是则返回 true。[ -p $file ] 返回 false。-u file检测文件是否设置了 SUID 位如果是则返回 true。[ -u $file ] 返回 false。-r file检测文件是否可读如果是则返回 true。[ -r $file ] 返回 true。-w file检测文件是否可写如果是则返回 true。[ -w $file ] 返回 true。-x file检测文件是否可执行如果是则返回 true。[ -x $file ] 返回 true。-s file检测文件是否为空文件大小是否大于0不为空返回 true。[ -s $file ] 返回 true。-e file检测文件包括目录是否存在如果是则返回 true。[ -e $file ] 返回 true。
#!/bin/bash
file/var/www/html/index.html
if [ -r $file ]
thenecho 文件可读
elseecho 文件不可读
fi
if [ -w $file ]
thenecho 文件可写
elseecho 文件不可写
fi
if [ -x $file ]
thenecho 文件可执行
elseecho 文件不可执行
fi
if [ -f $file ]
thenecho 文件为普通文件
elseecho 文件为特殊文件
fi
if [ -d $file ]
thenecho 文件是个目录
elseecho 文件不是个目录
fi
if [ -s $file ]
thenecho 文件不为空
elseecho 文件为空
fi
if [ -e $file ]
thenecho 文件存在
elseecho 文件不存在
fi五、Shell echo 命令
显示普通字符串 显示转义字符 显示变量
#!/bin/sh
read name
echo $name It is a test
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 显示换行 显示不换行
将 \n 改为 \c 即可
显示结果定向至文件 显示命令执行结果 六、Shell printf 命令
printf 命令的语法
printf format-string [arguments...]
参数说明
format-string: 一个格式字符串它包含普通文本和格式说明符。arguments: 用于填充格式说明符的参数列表。。
格式说明符由 % 字符开始后跟一个或多个字符用于指定输出的格式。常用的格式说明符包括
%s字符串%d十进制整数%f浮点数%c字符%x十六进制数%o八进制数%b二进制数%e科学计数法表示的浮点数
#!/bin/bash
printf %-10s %-8s %-4s\n 姓名 性别 体重kg
printf %-10s %-8s %-4.2f\n 郭靖 男 66.1234
printf %-10s %-8s %-4.2f\n 杨过 男 48.6543
printf %-10s %-8s %-4.2f\n 郭芙 女 47.9876
%-10s 指一个宽度为 10 个字符- 表示左对齐没有则表示右对齐