标签:意思 设置 正则表达 变量定义 com 退出 list 别名 运行命令
$HOME中的启动文件,大多数发行版中只会用一到两个。
$HOME/.bash_profile 用户登陆时执行
$HOME/.bashrc
$HOME/.bash_login
$HOME/.profile
? 执行顺序如下,只会执行找到的第一个,其它忽略,$HOME/.bashrc往往其它三个调用运行的
数组变量定义: mytest=(one two three four five), 将值放在括号中,值与值之间以空格隔开。
数组变量可以单独引用,也可以做为整个数组来引用
反引号字符包裹命令“ ` ”
使用 $() 的形式,这个好理解,$意思是引用变量的值 ,而(cmd)则是开启子shell执行命令。合在一起就是,引用cmd命令的执行结果.
推荐使用第2种方式,反引号,阅读困难,容易出问题。
两种方式都会创建子shell来运行命令
expr 5 + 6 所有数字和运算符之间必须有空格,理解:数字和运算符都地expr命令的参数,当然需要空格区分了
这种方式,数字和运算符之间不需要空格,有也不会报错,也不用考虑特殊字符的问题。怕种方式只支持整数运算
其实bc是一种变种语言,可以交互工作,脚本中使用可以使用管道将数据表达式传递给bc, 如 echo 3*2.5 | bc, 支持设置精度,比如 echo " scale=4 ; 1/3 " | bc 设置4位精度.
if command
then
commands
fi
command 命令退出状态码为0,执行then部分的语句,状态码是其它值不执行,
shell 语句可以写到一行,以 " ; " 分隔不同命令,
if command; then commands ; fi
if command
then
commands
else
commands
fi
if command1
then
commands
elif command2
then
commands
elif command3
then
commands
fi
if 命令只支持命令退出状态码, 不支持其它数字,字符串之类的比较等等,这些条件需要用test命令完成, if 条件写test 命令
命令格式
test conditon
test命令简化写法 , 用方括号定义测试条件,不需要声明test命令
[ conditon ]
如果不写condiotn test以非零退出
数值比较
* n1 -eq n2 检查n1是否与n2相等
* n1 -ge n2 大于 等于
* n1 -gt n2 大于
* n1 -le n2 小于等于
* n1 -lt n2 小于
* n1 - ne n2 不等于
字符串比较
文件测试
-d file 是否存在且是一个目录
-e file 是否存在
-f 存在且是一个普通文件
-r 存在且可读
-s 存在且非空
-w 存在且可写
-x 存在且可执行
-O 存在且属于当前用户所有
-G 存在且默认组与当前用户相同
file1 -nt file2 file1比file2新
file1 -ot file2 file1比file2旧
复合条件测试
[ condition1 ] && [ conditon2 ] : 且,两个条件同时满足,
将中括号中的条件测试换成命令,可用来做简化的if 判断,第一个命令执行成功才会执行第二个命令,如果第一个失败,不会执行第二个。
[ condition1 ] || [ conditon2 ] : 或,两个条件至少有一个满足,
将中括号中的条件测试换成命令,可用来做简化的if 判断,第一个命令执行失败才会执行第二个命令,如果第一个命令成功,不会执行第二个
用于数据表达式的双括号, 括号里可以直接表达式计算机及 >. < == 等比较大小
if (( $val1 * 2 > 90 ))
then
(( val2 = $val1 ** 2 ))
echo "The square of $val1 is $val2"
fi
用于高级字符串处理的双方括号, 像test一个比较字符串,但支持正则表达式(应该是shell通配符?),下例匹配r开头的字符串
if [[ $USER == r* ]]
then
echo "Hello $USER"
else
echo "Sorry, I do not know you"
fi
for var in list
do
comands
done
list默认为空格/tab/回车分隔的字符串, 分隔符由变量IFS定义,重新设置分隔符 IFS=:‘\n‘ 分隔符为" : " 或 回车
for var in one two three
do
comands
done
var=(one two three four)
for var in ${var[*]}
do
comands
done
for var in {1..6}
do
comands
done
for var in /root/*
do
comands
done
cat test.txt
oneasdfasfd
two123412
threeasdfafa
for var in $(cat test.txt)
do
comands
done
for (( i=1 ; i< 10; i++))
do
commands
done
满足条件时继续循环
while command1;command2....
do
commands
done
可以用多个测试命令,但只看最后一个命令的退出状态码
满足条件时退出循环
until command
do
commands
done
双分号
case $var in
pattern1 | pattern2) command1 ;;
pattern3) command2 ;;
pattern4| pattern5) command3 ;;
*) defealt commands
esac
标签:意思 设置 正则表达 变量定义 com 退出 list 别名 运行命令
原文地址:https://www.cnblogs.com/wyf368/p/13685387.html