time命令使用
time for n in {1. .10000};do char=`seq -S ":" 100`;echo $ {#char} &>/dev/null ; done
后台运行命令并写入“黑洞文件”
shell编程使用内置命令效率最高,减少使用管道符
`` 反引号 相当于 $()
命令行替换
例如:可以设变量
a = `ls`
案例:批量修改文件名
- 创建实验数据
touch yang_{1..5}_demo.jpg
touch yang_{1..5}_demo.png
- 去除demo字段
{f//_demo/}
- 批量去除
mv $f echo ${f//_demo/}
- 最后
for file_name in `ls *fin*jpg;do mv $file_ name`echo ${file_ _name//_ finished/}i;done
shell变量扩展
对变量的值进行判断处理
如果parameter变量值为空,返回word字符串
${ parameter: -word}
如果para变量为空,则word替代变量值,且返回其值
${ parameter :=word}
如果para变量为空,word当作stderr输出, 否则输出变量值,用于设置变量为空导致错误时,返回的错误信息
${ parameter : ?word}如果para变量为空,什么都不做,否则word返回
${ parameter : +word}
父子shell
source和点, 执行脚本,只在当前的shel1环境中执行生效
指定bash sh解释器运行脚本,是开启subshell, 开启子shell运行脚本命令
./script, 都会指定shebang,通过解释器运行,也是开启subshell运行命令|
查看进程
ps -ef –forest
-e:查看全部命令
-f:显示UID PID PPID
查看shell嵌套数量
echo $BASH_SUBSHELL
需要嵌套执行,可以用(),例如:
(ls;(pwd;(echo $BASH_SUBSHELL)))
shell的数值计算
计算机案例
判断if语句
- 中括号里面前后必须有一个空格,是固定的语法
- -n参数是if的语句,对字符串判断,如果字符串为空,条件就不成立
- 如果字符串不为空,条件成立
expr命令
expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。
计算字串长度
expr length “this is a test”
14
2、抓取字串
expr substr “this is a test” 3 5
is is
3、抓取第一个字符数字串出现的位置
expr index "sarasara" a
2
4、整数运算
代码实例
#!/bin/bash
falg="1"
while [ "$falg" -eq "1" ]
do
echo "---shell迷你计算器---"
echo "请选择对应的运算数字:"
echo "1:表示加法"
echo "2:表示减法"
echo "3:表示乘法"
echo "4:表示除法"
echo "5:退出计算器!"
read check
echo "值: $check"
if [ "$check" -eq "1" ]
then
echo "请输入第一个数:"
read a
echo "请输入第二个数:"
read b
result=`expr $a + $b`
echo "结果为:$result"
elif [ "$check" -eq "2" ]
then
echo "请输入第一个数:"
read a
echo "请输入第二个数:"
read b
result=`expr $a - $b`
echo "结果为:$result"
elif [ "$check" -eq "3" ]
then
echo "请输入第一个数:"
read a
echo "请输入第二个数:"
read b
result=`expr $a \* $b`
echo "结果为:$result"
elif [ "$check" -eq "4" ]
then
echo "请输入第一个数:"
read a
echo "请输入第二个数:"
read b
result=`expr $a / $b`
echo "结果为:$result"
else
falg="0"
fi
done
let命令运算
let命令的执行,效果等同于双小括号,但是,双括号效率更高
案例
let num=num+4
echo num
shell条件测试
read命令
Linux read命令用于从标准输入读取数值。
read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。
参数说明:
- -a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
- -d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。
- -p 后面跟提示信息,即在输入前打印提示信息。
- -e 在输入的时候可以使用命令补全功能。
- -n 后跟一个数字,定义输入文本的长度,很实用。
- -r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
- -s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
- -t 后面跟秒数,定义输入字符的等待时间。
- -u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。
我们常用的 -p
read -p "请输入年龄:" age
常用测试语法
test命令评估一个表达式,它的结果是真,还是假,如果条件为真,那么命令执行状态码结果就为0,否则就是不为0,通过 $?
取值
文件测试
- 常用参数
-a file 文件是否存在,存在为0
-s file 文件的长度是否大于0或文件非空,如果非空,为0
-nt file 某个指定的文件修改时间是否比另一个晚
-ot file某个指定的文件修改时间是否比另一个早
条件判断句
if expression
then
statement1
stetement2
fi
或
if exrexxion;then
statement1
statement2
fi