Shell学习笔记
来源:程序员人生 发布时间:2015-05-21 08:08:15 阅读次数:2991次
#!/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
垂直制表符
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠