shell脚本(二)


time命令使用

time for n in {1. .10000};do char=`seq -S ":" 100`;echo $ {#char} &>/dev/null ; done

后台运行命令并写入“黑洞文件”

shell编程使用内置命令效率最高,减少使用管道符

`` 反引号 相当于 $()

命令行替换

例如:可以设变量

a = `ls`

案例:批量修改文件名

  1. 创建实验数据
touch yang_{1..5}_demo.jpg
touch yang_{1..5}_demo.png
  1. 去除demo字段
{f//_demo/}
  1. 批量去除
mv $f echo ${f//_demo/}
  1. 最后
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

  1. source和点, 执行脚本,只在当前的shel1环境中执行生效

  2. 指定bash sh解释器运行脚本,是开启subshell, 开启子shell运行脚本命令

  3. ./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
fiif exrexxion;then
       statement1
       statement2
fi

文章作者: 小小星仔
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小小星仔 !
评论
  目录