Linux系统--脚本Bash
来源:互联网 发布:win7删除u盘linux分区 编辑:程序博客网 时间:2024/05/21 14:58
sh(全称Bourne Shell)、bash(全称Bourne Again Shell)
#!/bin/bash#! 是一个约定的标记,用来告诉系统该脚本需要什么解释器来执行。
运行脚本
chmod +x ./test.sh #使脚本具有执行权限./test.sh #执行脚本若想执行脚本时,执行 "test.sh",Linux系统会去PATH里寻找该文件。而只有/bin、/sbin、/usr/sbin等在PATH里。"./test.sh"表示当前目录的test.sh文件。
/bin/bash test.sh #将脚本文件 作为解释器运行的参数/bin/php test.php
定义变量
variable_name="this is a variable" #定义变量 可多次定义 但必须按第一次定义的格式 注意变量与"="间不能有空格echo $variable_name #使用已定义的变量echo ${variable_name} # {}可选,主要为了帮助解释器识别变量的边界echo "I am have varaible name ${variable_name}" #打印输出variable_name格式:首字符必须为字母、不能使用bash里的关键字(可用help命令查看保留关键字)
注:PHP语言中定义变量需要加 $ 符号
variable="I want readonly variable"readonly variable #只读变量variable_normal="normal variable"unset variable #删除变量,不能删除只读变量
字符串
#字符串可以用单引号,也可以用双引号、也可以不用引号#单引号里的任何字符都会原样输出,即其中的变量是无效的 注:单引号字符中不能出现单引号(转移符在其中失效)#双引号里可以有变量以及转义字符variable_name="student"greeting="hello, "$variable_name" !" #拼接字符串greeting_1="hello, ${variable_name} !" #等同上一句echo ${#greeting} #获取字符串长度echo `expr index "$greeting" na` #查找字符n或a的位置,注意"`"是反引号
数组
array_name=(value0 value1 value2) #括号表示数组,元素用空格符号或换行符隔开array_name1=(value0value1)array_name[0]=value0 #单独定义数组的各个分量array_name[2]=value1 #可以不适用连续的下标,而且下标的范围没有限制${数组名[下标]} #读取数组元素echo ${array_name[@]} #使用@符合获取数组中的所有元素length=${#array_name[@]} #获取数组元素个数length=${#array_name[*]} #获取数组元素个数lengthn=${#array_name[n]} #获取数组单个元素的长度
Bash Shell只支持一维数组
注释:#开头的行就是注释,可以将多段代码用花括号括起来,定义成一个函数,不调用相当于多行注释
字符串截取
echo ${var#*//} #var是变量名, *// 表示从左边开始删除第一个//号及左边的所有字符echo ${var##*/} # ##*/ 表示从左边开始删除至最右边的一个 / 号 即删除左边字符,保留右边字符echo ${var%/*} # %/* 表示从右边开始,删除第一个/号及右边的字符echo ${var%%/*} # %%/* 表示从右边开始,删除最左边一个/号及右边的字符echo ${var:0:5} #截取从左边第几个字符开始的几个字符echo ${var:7} #截取 左边7个字符除外的字符echo ${var:0-7:3} #其中0-7表示截取从右边算起第七个字符开始的3个字符echo ${var:0-7} #截取从右边第七个字符开始的所有字符总结:
#、##表示从左边开始删除。一个#表示从左边删除到第一个指定的字符;两个#表示从左边删除到最后一个指定的字符。
%、%%表示从右边开始删除。一个%表示从右边删除到第一个指定的字符;两个%表示从右边删除到最后一个指定的字符。
删除包括了指定的字符本身。
参数
执行Shell脚本时,向脚本传递参数。脚本内获取参数的格式:$n。$0代表脚本的文件名,$0代表第一个参数
$# 代表传递到脚本的参数个数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
$* 代表以一个单字符串显示所有向脚本传递的参数。"$*"表示以"$1 $2 ... $n"的形式输出所有参数。
$@ 与$*相同。"$@"表示以"$1" "$2".."$n"的形式输出所有参数。
#!/bin/bashfor i in "$*";do echo $idone# ./test.sh 1 2 3# 输出# 1 2 3for i in "$@";do echo $idone# 输出# 1# 2# 3
运算符
expr是一款表达式计算工具,使用它就能完成表达式的求值操作。
val=`expr 2 + 2` # 注意反引号 表达式和运算符之间要有空格echo "两数之和为:$val"a=$b #赋值`expr $a \* $b` #乘法 *前必须加\转义# [ $a == $b ] #是否相等 注意空格,[$a==$b]是错误的# [ $a != $b ]关系运算符只支持数字,不支持字符串,除非字符串的值是数字
[ $a -eq $b ] #两个数是否相等,相等返回true[ $a -ne $b ] #两个数是否不相等[ $a -gt $b ] # >[ $a -lt $b ] # <[ $a -ge $b ] # >=[ $a -le $b ] # <=[ !false ] # 返回true 非运算[ $a -lt 20 -o $b -gt 100 ] # -o 或运算[ $a -lt 20 -a $b -gt 100 ] # -a 与运算#逻辑运算符[[ $a -lt 20 && $b -gt 100 ]] # 逻辑的AND [[ $a -lt 20 || $b -gt 100 ]] # 逻辑的OR#字符串运算符
[ $a = $b ] #检查两个字符串是否相等[ $a != $b ] #检查两个字符串是否不相等[ -z $a ] #检查字符串长度是否为0[ -n $a ] #检查字符串长度是否不为0[ $a ]检测字符串是否为空#文件测试运算符:用于检查Unix文件的各种属性
[ -b $file ] #检查文件是否是块设备文件[ -c $file ] #检查文件是否是字符设备文件[ -d $file ] #检查文件是否是目录[ -f $file ] #检查文件是否是普通文件(既不是目录,也不是设备文件)[ -g $file ] #检查文件是否是设置SGID位[ -k $file ] #检查文件是否是设置粘着位(Sticky Bit)[ -p $file ] #检查文件是否是有名管道[ -u $file ] #检查文件是否是设置SUID位[ -r $file ] #检查文件是否是可读[ -w $file ] #检查文件是否是可写[ -x $file ] #检查文件是否是可执行[ -s $file ] #检查文件是否是空(文件大小是否大于0)[ -e $file ] #检查文件(包括目录)是否存在
echo命令
echo "It is a test" #显示普通字符串echo It is a test #省略双引号 效果同上echo "\"It is a test\"" #显示转义字符 输出:"It is a test"
显示换行
echo -e "OK! \n" # -e开启转义echo -e "OK! \c" # \c不换行echo "It is a test" > myfile #显示结果定向至文件echo `data` #显示命令执行结果 显示当前日期
printf命令 模拟C程序库里的printf程序
printf format-string [arguments...] #format_string格式控制字符串 arguments 参数列表
test命令
用于检查某个条件是否成立,它可以进行数值、字符和文件三方面的测试
num1=100num2=100if test $[num1] -eq $[num2]then echo "相等"else echo "不相等"firesult=$[num1+num2] #注意等号两边不能有空格 []执行基本的算数运算str1="str"str2="str"if test $str1 = #str2 #测试字符串是否相等if test -e ./bash #测试文件是否存在if test -e ./notFile -o -e ./bash 测试是否至少一个文件存在
流程控制
sh的流程控制不可为空,即控制体必须有语句执行
if语句
if conditionthen command1else command2fiif condition1then command1elif condition2then command2else command3fifor循环
for var in item1 itme2 ... itemN #当变量值在列表中,执行一次所有命令do commanddonefor var in item item2 ... itmeN; do command;command2;done;#注:in 列表 可以包含替换、字符串和文件名while循环
int=1while( ( $int<=5 ) )do echo $int let "int++" #Bash let命令,用于执行一个或多个表达式,变量计算中不需要加上$来表示变量done无限循环
while :do commmanddone#或 while true 或 for((; ;))until语句
until conditiondo commmanddonecase语句
case 值 in 模式1) command ;; #两个 分号表示break 模式2) command2 ;;esac#注意 case 使用 esac 作为结束标记
跳出循环 break或continue
Shell函数
[ function ] funname [()]{ action; [return int;] #参数返回,若没有return,则将以最后一条命令运行结果作为返回值。}#注意函数执行 不需要()括号#函数返回值在调用该函数后通过 $? 来获得#函数参数,在函数体内部,通过 $n 的形式来获得参数的值 仅限 1到9#注意,$10 表示第一个参数 + '0' ${10}获得第十个参数# $# 传递到脚本的参数个数
输入/输出重定向
# command > file 将输出重定向到file# command < file 将输入重定义到file# command >> file 将输出以追加的方式重定向到file# n > file 将文件描述符为n的文件重定向到file# n >> file # n >& m 将输出文件m和n合并# n <& m 将输入文件m和n合并# << tag 将开始标记tag和结束标记tag之间的内容作为输入一般情况下,每个Unix/Linux命令运行时都会打开三个文件:
标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
Here Doucument是Shell中的一种特殊的重定向方式,用于将输入重定向到一个交互式Shell脚本或程序。
# 格式如下command << delimiter documentdelimiter# 将两个delimiter之间的内容(document)作为输入传递给command# 注意 结尾的delimiter一定要顶格写,前面或后面都不能有任何字符,包括空格和tab缩进#示例$ wc -l << EOF 欢迎来到 CSDNEOF# 输出结果为2行# wc -l 命令计算 Here Document的行数
/dev/null文件:用于执行某个命令,但不希望在屏幕上显示输出结果。方法:将输出重定位到 /dev/null
$ command > /dev/null#/dev/null文件是一个特殊的文件,写入到它的内容都会被丢弃。屏蔽stdout 和 stderr
$ command > /dev/null 2>&1 #重定向输出到文件,再将stderr重定向到stdout# 放在>后面的&,表示重定向的目标不是一个文件,而是一个文件描述符# 文件描述符为1的文件(即/dev/stdout,stdout在file system中的映射)顺序问题
xxx > list 2>&1 #第一种xxx 2>&1 > list #第二种#第一种,先将要输出到stdout的内容重定向到文件,此时文件list就是这个程序的stdout,再将stderr重定向到stdout,也就是文件list#第二种,先将要输出到stderr的内容重定向到stdout,此时会产生一个stdout的拷贝,作为程序的stderr,而程序原本要输出到stdout的内容,#依然是对接到stdout原身上的,因此第二步重定向stdout,对stdout的拷贝不产生任何影响。
后续实例更新
- Linux系统--脚本Bash
- linux脚本bash
- linux bash脚本常用命令
- linux bash脚本入门
- Linux-bash脚本编程
- Linux bash脚本
- linux之bash脚本
- linux bash command bash脚本命令
- 【linux脚本】bash中的循环
- [转] Linux bash 脚本编写
- Linux学习----bash脚本编程
- linux bash脚本编程知识点
- bash脚本学习之一:ubuntu系统bash.bashrc走读注释
- bash shell脚本之查看系统环境变量
- Linux bash综合实例之 bash脚本编辑器
- Linux编程入门之--脚本编程(BASH)
- linux bash脚本 带有函数定义
- Linux bash shell脚本语法入门
- tomcat报:java.net.BindException: Permission denied <null>:80
- DPDK(13):rte_malloc内存管理
- php-fpm配置
- [绍棠_Swift] swift4.0 NSMutableAttributeString的Range和NSRange问题
- php扩展开发---kqueue 实例
- Linux系统--脚本Bash
- IE11下,<!doctype>声明加html不能加载css的问题
- 第十周 项目2
- 二次开发 app项目用android studio打包
- phpfpm
- Spark源码分析之Task
- tensorflow中可视化tensorboard的启动
- Ubuntu中root用户和user用户的相互切换
- Android替换系统默认输入法