shell基础

时间:2020-09-18 04:13:27   收藏:0   阅读:38

0. linux通配符和大括号扩展

1. 文件目录操作

2. 文件内容查看

3. 系统状态

4. 文件处理

5. shell 进程

6. shell变量

6.1. 变量操作命令

6.2. 全局变量和局部变量

6.3. 登陆shell时加载的命令

$HOME中的启动文件,大多数发行版中只会用一到两个。

? 执行顺序如下,只会执行找到的第一个,其它忽略,$HOME/.bashrc往往其它三个调用运行的

6.4. 数组变量

  1. 数组变量定义: mytest=(one two three four five), 将值放在括号中,值与值之间以空格隔开。

  2. 数组变量可以单独引用,也可以做为整个数组来引用

6.5. 变量引用

  1. 直接 $varname , varname后必须是空格或者回车,否则shell无法正确识别变量名
  2. ${varname} 建议使用大括号包裹变量名, 上面数组变量类似。

6.6. 命令替换

  1. 反引号字符包裹命令“ ` ”

  2. 使用 $() 的形式,这个好理解,$意思是引用变量的值 ,而(cmd)则是开启子shell执行命令。合在一起就是,引用cmd命令的执行结果.

    推荐使用第2种方式,反引号,阅读困难,容易出问题。

    两种方式都会创建子shell来运行命令

7. 数学运算

7.1. expr命令

expr 5 + 6 所有数字和运算符之间必须有空格,理解:数字和运算符都地expr命令的参数,当然需要空格区分了

7.2. 命令方括号 $[ 5+6]

这种方式,数字和运算符之间不需要空格,有也不会报错,也不用考虑特殊字符的问题。怕种方式只支持整数运算

7.3. 浮点计算

7.3.1. shell 内建bash计算器bc工具

其实bc是一种变种语言,可以交互工作,脚本中使用可以使用管道将数据表达式传递给bc, 如 echo 3*2.5 | bc, 支持设置精度,比如 echo " scale=4 ; 1/3 " | bc 设置4位精度.

8. if 语句

8.1. if 语句

  1. if
if command
then
	commands
fi

command 命令退出状态码为0,执行then部分的语句,状态码是其它值不执行,

shell 语句可以写到一行,以 " ; " 分隔不同命令,

if command; then commands ; fi
  1. if...else
if command
then
	commands
else
	commands
fi
  1. if ...elif...elif..efif.......
if command1
then
	commands
elif command2
then
	commands
elif command3
then
	commands
fi

8.2. test命令

if 命令只支持命令退出状态码, 不支持其它数字,字符串之类的比较等等,这些条件需要用test命令完成, if 条件写test 命令

  1. 命令格式

    test conditon
    

    test命令简化写法 , 用方括号定义测试条件,不需要声明test命令

     [ conditon ]
    

    如果不写condiotn test以非零退出

  2. 数值比较

    * n1 -eq n2 检查n1是否与n2相等
    * n1 -ge n2 大于 等于
    * n1 -gt n2 大于
    * n1 -le n2 小于等于
    * n1 -lt n2 小于
    * n1 - ne n2 不等于

  3. 字符串比较

    • str1 = str2 相等
    • str1 != str2 不等
    • str1 < str2 小
    • str1 > str2 大
    • -n str1 长度是否非零
    • -z str1 长度是否为零
  4. 文件测试

    -d file 是否存在且是一个目录

    -e file 是否存在

    -f 存在且是一个普通文件

    -r 存在且可读

    -s 存在且非空

    -w 存在且可写

    -x 存在且可执行

    -O 存在且属于当前用户所有

    -G 存在且默认组与当前用户相同

    file1 -nt file2 file1比file2新

    file1 -ot file2 file1比file2旧

  5. 复合条件测试

    [ condition1 ] && [ conditon2 ] : 且,两个条件同时满足,

    将中括号中的条件测试换成命令,可用来做简化的if 判断,第一个命令执行成功才会执行第二个命令,如果第一个失败,不会执行第二个。

    [ condition1 ] || [ conditon2 ] : 或,两个条件至少有一个满足,

    将中括号中的条件测试换成命令,可用来做简化的if 判断,第一个命令执行失败才会执行第二个命令,如果第一个命令成功,不会执行第二个

8.3. if - then 高级特性

9. 更多结构化命令

9.1. for

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

9.2. while命令

满足条件时继续循环

while command1;command2....
do 
  commands
done

可以用多个测试命令,但只看最后一个命令的退出状态码

9.3. until命令

满足条件时退出循环

until command
do
  commands
done

9.4. case命令

双分号

case $var in 
  pattern1 | pattern2) command1 ;;
  pattern3) command2 ;;
  pattern4| pattern5) command3 ;;
  *) defealt commands
esac
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!