Shell学习笔记
发布时间:2020-12-13 20:10:51 所属栏目:PHP教程 来源:网络整理
导读:#!/bin/bash # Author:undoner # Copyright (c) undoner # Test Code # ----------------------------------------------------------------- #标准输入输出 echo What is your name? read PERSON echo Hello,${PERSON} printf %d %s 1 abc # ---------------
#!/bin/bash # Author:undoner # Copyright (c) undoner # Test Code # ----------------------------------------------------------------- #标准输入输出 echo "What is your name?" read PERSON echo "Hello,${PERSON}" printf "%d %s " 1 "abc" # ----------------------------------------------------------------- #声明变量:readonly(只读),unset(删除) var="undoner" echo "${var}" #输出 undoner echo ${#var} #统计字符数量,输出 7 echo ${var:1:4} #字符串截取,输出ndon echo `expr index "$var" d` #查找字符,输出索引 3 # ----------------------------------------------------------------- #声明函数: Hello () { echo "声明函数" } Hello #输出:声明函数 # ----------------------------------------------------------------- #条件控制: echo 'if else语句' if_a=10 if_b=20 if [ $if_a == $if_b ] then echo "if_a is equal to if_b" else echo "if_a is not equal to if_b" fi # ----------------------------------------------------------------- #循环控制: #break命令允许跳出所有循环(终止履行后面的所有循环)。 #continue命令与break命令类似,但只跳出当前循环。 echo 'for循环' for for_str in 'This is a string' do echo $for_str done #输出:This is a string for FILE in $HOME/.bash* do echo $FILE done #输出:显示主目录下以 .bash 开头的文件 echo 'while循环' while_sum=0 while [ $while_sum -lt 5 ] do while_sum=`expr $while_sum+1` echo $while_sum done #实现计数(有换行),0 1 2 3 4 5 echo 'until循环' until_sum=0 until [ ! $until_sum -lt 5 ] do echo $until_sum until_sum=`expr $until_sum + 1` done #实现计数(有换行),0 1 2 3 4 5 # ----------------------------------------------------------------- echo 'case esac语句' echo 'Input a number between 1 to 2' echo 'Your number is:c' read aNum case $aNum in 1) echo 'You select 1' ;; 2) echo 'You select 2' ;; *) echo 'You do not select a number between 1 to 4' ;; esac # ----------------------------------------------------------------- #声明数组 array_name=(value0 value1 value2 value3) echo ${array_name[@]} # 获得数组所有的元素 echo ${array_name[*]} # 获得数组所有的元素 echo ${array_name[2]} # 获得数组单个元素 echo ${#array_name[@]} # 获得数组元素的个数 echo ${#array_name[*]} # 获得数组元素的个数 echo ${#array_name[2]} # 获得数组单个元素的长度 # ----------------------------------------------------------------- #变量替换:变量替换可以根据变量的状态(是不是为空、是不是定义等)来改变它的值 # 情势 说明 # ${var} 变量本来的值 # ${var:-word} 如果变量 var 为空或已被删除(unset),那末返回 word,但不改变 var 的值。 # ${var:=word} 如果变量 var 为空或已被删除(unset),那末返回 word,并将 var 的值设置为 word。 # ${var:?message} 如果变量 var 为空或已被删除(unset),那末将消息 message 送到标准毛病输出,可以用来检测变量 var 是不是可以被正常赋值。若此替换出现在Shell脚本中,那末脚本将停止运行。 # ${var:+word} 如果变量 var 被定义,那末返回 word,但不改变 var 的值。 # ----------------------------------------------------------------- #算术运算符列表 #运算符 说明 举例 # + 加法 `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。 # ----------------------------------------------------------------- #关系运算符列表 # 运算符 说明 举例 # -eq 检测两个数是不是相等,相等返回 true。 [ $a -eq $b ] 返回 true。 # -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。 # ----------------------------------------------------------------- #布尔运算符列表 # 运算符 说明 举例 # ! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。 # -o 或运算,有1个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。 # -a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。 # ----------------------------------------------------------------- #字符串运算符列表 # 运算符 说明 举例 # = 检测两个字符串是不是相等,相等返回 true。 [ $a = $b ] 返回 false。 # != 检测两个字符串是不是相等,不相等返回 true。 [ $a != $b ] 返回 true。 # -z 检测字符串长度是不是为0,为0返回 true。 [ -z $a ] 返回 false。 # -n 检测字符串长度是不是为0,不为0返回 true。 [ -z $a ] 返回 true。 # str 检测字符串是不是为空,不为空返回 true。 [ $a ] 返回 true。 # ----------------------------------------------------------------- #文件测试运算符列表 # 操作符 说明 举例 # -b file 检测文件是不是是块装备文件,如果是,则返回 true。 [ -b $file ] 返回 false。 # -c file 检测文件是不是是字符装备文件,如果是,则返回 true。 [ -b $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。 # ----------------------------------------------------------------- #输入输出重定向,全部可用的重定向命令列表 # 命令 说明 # command > file 将输出重定向到 file。 # command < file 将输入重定向到 file。 # command >> file 将输出以追加的方式重定向到 file。 # n > file 将文件描写符为 n 的文件重定向到 file。 # n >> file 将文件描写符为 n 的文件以追加的方式重定向到 file。 # n >& m 将输出文件 m 和 n 合并。 # n <& m 将输入文件 m 和 n 合并。 # << tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 # 其他: # /dev/null 不显示输出结果 # /dev/null 2>&1 屏蔽 stdout 和 stderr的输出 # ----------------------------------------------------------------- # wc命令 # 命令 说明 # wc -c file 统计字节数。 # wc -l file 统计行数。 # wc -m file 统计字符数。这个标志不能与 -c 标志1起使用。 # wc -w file 统计字数。1个字被定义为由空白、跳格或换行字符分隔的字符串。 # wc -L file 打印最长行的长度。 # wc -help file 显示帮助信息 # wc --version file 显示版本信息 # ----------------------------------------------------------------- #特殊变量列表 #变量 含义 # $0 当前脚本的文件名 # $n 传递给脚本或函数的参数。n 是1个数字,表示第几个参数。例如,第1个参数是$1,第2个参数是$2。 # $# 传递给脚本或函数的参数个数。 # $* 传递给脚本或函数的所有参数。 # $@ 传递给脚本或函数的所有参数。被双引号(" ")包括时,与 $* 稍有不同,下面将会讲到。 # $? 上个命令的退出状态,或函数的返回值。 # $$ 当前Shell进程ID。对 Shell 脚本,就是这些脚本所在的进程ID。 #转义字符 含义 # 反斜杠 # a 警报,响铃 # 退格(删除键) # f 换页(FF),将当前位置移到下页开头 # 换行 # 回车 # 水平制表符(tab键) # v 垂直制表符 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |