shell脚本备忘
来源:互联网 发布:软件功能性能 编辑:程序博客网 时间:2024/06/06 06:34
一、什么是脚本
脚本不属于任何计算机语言的范畴,但到目前为止,人们往往把那种不需要编译的程序文件称之为脚本。它的代码不需要编译,而是被“解释”执行,所以运行时需要一个“解释器”。
在Linux系统中,常用的脚本有Bash、Perl。
二、一些shell脚本示例
1、新建一个文件,命名为test,输入以下内容
#!/bin/bash
echo "Hello bash" #display one message
在这个文件保存的目录下,执行chmod a+x test,为test添加执行权限,然后在终端运行该脚本:
#./test
Hello bash
第一行#!/bin/bash是必需的,并且必须在首行,让操作系统选择用Bash来解释执行脚本文件。如果是Perl脚本,第一行则为#!/bin/perl
echo是一个Linux命令,#后面是注释
脚本中可以调用各种Linux命令,因此,凡是需要按一定的次序执行多个Linux命令的场合都可以使用脚本来完成。
2、新建一个文件,命名为test2
#!/bin/bash
echo $1
echo $2
echo $3
用户输入可以用$n表示,n为1-9自然数,分别代表输入的第n个参数,用空格或Tab分隔。
#./test2 you are well
you
are
well
3、变量定义
#!/bin/bash
A=b
All=all
echo "$A"ll
echo $All
该段代码的两次输出分别为bll和all,引用变量在前面加一个美元符就可以了。为避免混淆,可以加双引号。
4、条件判断
条件判断主要是判断两个字符是否相等,两个数字是否相等
#!/bin/bash
if [ "$1"="normal" ]
then
echo "this is normal case"
elif [ -z "$1" ]
then
echo "no input"
fi
条件语句必须使用fi结束
条件语句中“[”符号后面必须有一个空格
附:字符串的比较和整数的比较的一些操作符
-n 操作数的长度不为零
-z 操作数的长度为零
-d 操作数对应一个目录
-f 操作数对应一个文件
-eq 操作数为整数,并且相等
-neq 操作数为整数,但不相等
= 操作数为字符串,并且相等
!= 操作数为字符串,不相等
-lt 小于,操作数为整数
-gt 大于,操作数为整数
-ge 大于等于,操作数为整数
-le 小于等于,操作数为整数
5、while [] ...do...done语句
#!/bin/bash
echo "please use add or delete or exit"
ACTION="default"
while [ -n $ACTION ]
do
read ACTION
case $ACTION in
add)
echo "add"
;;
delete)
echo "delete"
;;
exit)
echo "exit"
break
;;
*)
echo "invalide"
;;
esac
done
在这里分享给大家一个小技巧,这是我在调试脚本时遇到的情况
假如你是在windows里写的脚本,放到Linux运行bad interpreter: 没有那个文件或目录”错误,原因是在windows下写的脚本是dos格式的,放在Linux下编码不识别,解决方法是使用dos2unix命令转一下,即输入: dos2unix 文件名,就OK了!
while语句和if语句中的条件判断格式完全相同。read是一个Linux命令,用于提示用户输入并以按回车键结束输入。in也是一个Linux命令。case分支也可以有通配符,即星号,每一个分支结束符号是两个分号。esac也是一个Linux命令,这里可以理解为case语句的结束标识。(脚本可以调用各种Linux命令)
done语句是整个while语句的结束标识。要退出while循环,可以用break
6、for循环
Bash中的for循环类似于java中的foreach语句,for一般和in联合使用,用于从某个集合中逐个取出元素并对其进行操作,如下例子:
#!/bin/bash
for x in 1 2 3 4 5 hello
do
echo $x
done
该段代码将显示in集合中的所有元素。
另一个for循环示例:
#!/bin/bash
for x in `ls`
do
echo `basename $x`
echo `dirname $x`
done
uname
该脚本把Linux ls命令的输出作为集合的输入,需加上··号,这个号在键盘1的左边。uname用于显示操作系统的内部名称basename和dirname命令用于显示一个字符串中的文件名称和路径。basename和dirname本身并不去检测该文件是否真正存在于磁盘上,而仅仅是针对字符串的操作。
7、函数
#!/bin/bashstrcat()
{
OUT="$1"" ""$2"
return 0
}
strcat2()
{
echo "$1"" ""$2"
return 3
}
A="bird"
B="mouse"
OUT=""
strcat $A $B
echo $OUT
OUT2=`strcat2 $A $B`
echo $?
echo $OUT2
定义函数时,不需要定义参数,在函数实体中可以直接使用$1 $2代表输入的第n个参数
return返回整数,相当于C语言中的exit(int)。函数的返回值实际上是echo后面的内容
调用函数时,把函数返回值赋给变量要用··(1左边那个键)包起来
$?代表上一个命令的return值,这个命令可以是函数,也可以是Linux命令
8、常用内置符号常量
$@ 代表全部参数,比如test a b c ,此处“a” “b” “c”展开后为三个字符串
$* 全部参数,test a b c,此处“a b c”展开后为一个字符串
$# 参数的个数
$? 上一个命令的return值
$$当前命令所在的进程号(PID)
- shell脚本备忘
- shell脚本实例备忘
- Bash shell脚本备忘
- shell脚本备忘
- shell脚本备忘
- Shell 脚本(备忘)
- shell脚本备忘
- shell脚本基础(备忘)
- 备忘几个有用的shell脚本
- Shell 脚本条件判断的三中类型(备忘)
- shell脚本中位置参数 $0 $1 .. $* $#的备忘
- 工作备忘-制作Framework所用shell脚本代码
- shell备忘
- Android执行shell脚本命令(备忘记录与实际应用)
- ubuntu下shell脚本同时运行node server.js 和ionic serve 命令_备忘
- shell中expr备忘
- Linux shell 常用命令备忘
- shell break语句备忘
- java.util.Arrays之后,使用Arrays.copyOfRange方法
- How_to_build_an_ARM/DSP_Hello_World_program_on_the_DaVinci_EVM
- Agents
- js经验总结
- 表格的编辑
- shell脚本备忘
- sendBroadcast可以在Service中被调用的原因
- 福建电信的计费查询平台应用--案例
- struts配置与详解
- ALV常用参数的详细描述
- row_number rank 的区别
- Struts2环境的搭建
- 刚才看到,我开始到上海时候的其中一个住址了
- EZ-USB 68013学习笔记(一)——USB协议之描述符