Shell 脚本实践
来源:互联网 发布:软件测试的目的 编辑:程序博客网 时间:2024/04/26 09:21
Shell 脚本实践
Shell 用 C 语言编写的程序,既是一种命令行语言,又是一种程序设计语言,用 shell 编写的称为脚本程序(Shell Script)
两种运行方法:
1、作为可执行程序
chmod +x ./test.sh./test.sh
2、作为解释器参数
sh test.sh
Shell 变量
变量名不加 $ ,且变量名与等号间不能有空格
变量名不能有空格,不能用标点,不能用 bash 关键字
可以用语句给变量赋值
for file in `ls /etc`
遍历 etc 中的文件
使用变量,只需要在变量名前添加 $ ,加花括号可以帮助解释器识别变量名
echo "Hello, ${name}!"
已经定义的变量可以被重新赋值
myUrl="http://www.baidu.com"myUrl="http://www.google.com"
可以声明只读变量
readonly myUrl
删除变量
unset myUrl
Shell 字符串
单引号字符串:任何单引号内的字符串都会原样输出,变量无效
双引号字符串:可以在双引号字符串中输出变量,同时也可以存在转义字符
拼接字符串
echo $a $b# hello loch hello cggecho $a$b# hello lochhello cggecho $a + $b# hello loch + hello cgg
获取字符串长度
echo ${#a}# 10 ("hello loch").length
提取字符串
echo ${a:1:4}# 从第二个字符开始提取四个字符
查找字符
echo `expr index "a" is`# error: expr syntax error
Shell 数组
只支持一维数组
array_name=(value0 value1 value2 value3)# orarray_name=(value0value1value2)# orarra_name[0]=value0
读取数组
$(array_name[0])
获取数组长度
echo ${#array_name[@]}# 3echo ${#array_name[*]}
脚本传参
我们可以在执行脚本时,传递参数,脚本内获取参数的格式为:
$n# n 为脚本参数的顺序,从1开始# $0 为当前执行的文件名
#
for i in “
done
# 1 2 3for i in "$@"; do echo $idone # 循环体执行了3次
Shell 运算符
算数运算符
原生 bash 不支持简单的数学运算,需要借助 expr
expr 是一款表达式计算工具,可以完成表达式的求值
val=`expr 2 + 2`
注意:表达式和运算符之间要有空格,
2+2
不会执行加法运算,而是作为字符串存在;只能进行整数运算运算符 举例 +,-,*,/,% `expra+ b` = b=$a == if[a== b] != if[a!= b]注意:*前必须添加反斜杠 \ 才能进行乘法运算
关系运算符
注意:关系运算只支持数字,或者值为数字的字符串,空格很必要
运算符 说明 举例 -eq 是否相等 [a−eq b ] -ne 是否不等 [a−ne b ] -gt 是否左大于右 [a−gt b ] -lt 是否左小于右 [a−lt b ] -ge 是否左大于等于右 [a−ge b ] -le 是否左小于等于右 [a−le b ]布尔运算符
注意:布尔运算符的成员为布尔值或值为布尔类型的表达式
运算符 说明 举例 ! 非 [ !false ]
!与false之间没有空格 -o 或 [a−lt20−o b -gt 100 ] -a 与 类比上面的或逻辑运算符
&& 与
|| 或与布尔运算符有什么区别。。
字符串运算符
运算符 说明 举例 = 是否相等 [a= b ] != 是否不等 [a!= b ] -z 是否长度为 0 [ -z $a ] -n 是否长度不为 0 [ -n $a ] str 是否不为空 [ $a ]文件测试运算符
操作符 说明 -b file 是否为块设备文件
Linux秉承一切都是文件的设计思想,将所有的块设备也看成文件,通常存放在/dev目录下,磁盘是常见块设备 -c file 是否是字符设备文件
键盘和打印机是常见的字符设备 -d file 是否是目录 -g file 是否设置了 SGID 位
chmod g+s filename -k file 是否设置了 SBIT 位 -p file 是否是有名管道 -u file 是否设置了 SUID 位 -r file 是否可读 -w file 是否可写 -x file 是否可执行 -s file 是否为空 -e file 是否存在
Shell echo
echo "Hello World"echo Hello Worldecho "\"Hello World"\"echo "Hello ${name}"echo "Hello, \n"# 显示结果定向到文件,覆盖原文件内容或者创建新文件echo "Hello World" > myfile# 显示命令执行结果echo `date`
Shell printf
printf format-string [arguments...]# format-string 格式控制字符串# arguments 参数列表
printf 没有自动换行,需要手动添加 \n
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kgprintf "%-10s %-8s %-4.2f\n" 自超 男 90.1234# 姓名 性别 体重kg# 自超 男 90.12
%-10s 表示一个宽度为10个字符的左对齐的字符串,-表示左对齐,没有-表示默认右对齐,如果超过10个字符,也会显示,但是格式会被打乱
%-4.2f 表示浮点数,保留两个小数
%c 表示单个字符
%d 表示整数
转义序列 说明 \a 警告字符 \b 后退 \f 换页 \n 换行 \r 回车 \t 水平制表符 \v 垂直制表符 \ 反斜杠 \ \ddd 表示1到3位的八进制字符 \0ddd 表示1到3位的八进制字符
流程控制
shell 的流程控制分支不能为空
if 语句
# 写法1if [condition]then command1 ...fi# 写法2if [condition]; then command1; fi# 写法3if [condition]then command1else command2fi# 写法4if [condition1] then command1elif [condition2]then command2else command3fi
for 循环
for var in item1 item2 ... do command1 ...done
通过
$var
变量名来获取当前循环过程的值while 循环
while [condition]do command1done# while 可以读取键盘信息while read FILMdo echo $FILMdone
until 循环
until [condition]do command1done
虽然 until 在前,但是每次判断在循环末尾,所以循环体至少会执行一次
case 多选语句
case val inmode1) command1 ;;mode2) command2 ;;*) defaultCommand ;;esac
*) 为 default 默认执行项
break 和 continue
break 结束循环
continue 提前结束当前循环,进入下一次循环
Shell 函数
函数定义通用格式
[ function ] funname [()]{ action; [return int;]}# []中为可选项demoFun(){ echo 'test func'}demoFunecho $?# $? == 0
注意:所有函数必须先定义后调用
$?为函数返回值的调用
获取函数参数,
特殊参数 说明 $# 传递到函数的参数个数 $* 以单字符串显示连接显示所有参数 $@ 使用时用引号包裹,返回可遍历的参数列表
输入输出重定向
输入重定向
read FILM < helloecho $FILM# 获取 hello 文件中的内容,并输出到终端
输出重定向
echo 'test' > hello# 将本要输出到终端的 'test' 输出到 hello 文件中,覆盖 hello 中原有的内容
文件描述符 0 表示标准输入 STDIN
1 表示标准输出 STDOUT
2 表示标准错误输出 STDERR
文件引用
#!/bin/bash#. ./CONFIG.sh# 引入了 CONFIG.sh 后,可以使用在 CONFIG 中定义的变量和函数
- shell脚本实践
- Shell 脚本实践
- 启动dubbo\shell脚本实践
- Shell脚本实践笔记-备份数据库
- 编写Shell脚本的最佳实践
- 编写Linux Shell脚本的最佳实践
- 编写Linux Shell脚本的最佳实践
- 编写Shell脚本的最佳实践
- 编写Shell脚本的最佳实践
- 编写Shell脚本的最佳实践
- 编写Shell脚本的最佳实践
- 编写Shell脚本的最佳实践
- 编写Shell脚本的最佳实践
- 编写Shell脚本的最佳实践
- @shell脚本中数组array常用技巧学习实践@
- 关于shell脚本编程的10个最佳实践
- 关于shell脚本编程的10个最佳实践
- 关于shell脚本编程的10个最佳实践
- Android中的MVP
- php正则应用:异常Delimiter must not be alphanumeric or backslash
- Sys::AlarmCall
- 【BZOJ 2002】 [Hnoi2010]Bounce 弹飞绵羊 LCT
- linux C语言之called object ‘maze’ is not a function or function pointer printf("%d\t", maze(i, j))
- Shell 脚本实践
- Android多屏幕适配-平板
- Java Servlets 注入spring bean
- 【Linux】进度条与缓冲区
- 使用mock进行数据拦截实战感悟
- POP3、IMAP和SMTP
- 汇编(指令cpuid)获取cpu信息
- Exporting Your App for Testing
- 用foreach来遍历数组