shell定义
shell是一种应用程序,可以看做是连接用户和linux内核的桥梁。它提供了一个界面供用户访问操作系统内核的服务;
shell变量
- 变量声明:变量和等号之间不能有空格;
- 变量使用:
name="neil" echo $name echo ${name} # 花括号的目的是方便识别变量边界,推荐使用;
- 只读变量
运行#!/bin/bash uname="fn" readonly uname uname ="shell"
bash a.bash
命令,得到以下结果:
- 删除变量:
unset var_name
,变量删除后无法再调用,且该命令无法删除只读变量;
shell传参
shell脚本执行时可以通过命令行传参,在脚本内通过$n
捕获第n个参数,其中$0
是shell脚本文件名;
常见特殊字符:
字符 | 含义 |
---|---|
$# | 传递至脚本文件的参数个数 |
$* | 以但字符串形式显示所以传递至脚本文件的参数 |
$$ | 脚本运行的当前进程ID |
$! | 后台运行的最后一个进程的ID |
$@ | 将所有传递至脚本文件的参数单独返回,注意与$*的区别,不是以单字符串形式 |
$- | 与set命令功能相同,显示shell所使用的当前选项 |
$? | 显示最后命令的退出状态,0表示无错误,否则表示有错误 |
#!/bin/bash
echo "shell传参实例"
echo "文件名:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "参数长度:$#"
echo "所有参数:$*"
for i in "$@"; do
echo $i
done
echo "当前设置:$-"
echo "退出状态:$?"
shell字符串
- 单引号里的所有字符会原样输出,不会被转义;
- 双引号支持输出变量和转义字符;
- 字符串拼接
- 提取子串
uname="whoami" echo ${uname:1:4} # 输出 "hoam"
- 获取长度
echo ${#uname} # 输出6
- 查找子串
str="hello, shell" echo `expr index "$str" el` # 在str中查找e或l,输出2
shell流程控制
-
条件语句
#!/bin/bash a=10 b=20 if [ $a -eq $b ] then echo "a=b" elif [ $a -gt $b ] then echo "a>b" else echo "a<b" fi
-
for循环
for i in item1, item2 ... itemN do xxx xxx echo $i xxx done # 单行格式 for i in arr; do cmd1;cmd2...done; # demo #!/bin/bash arr=(1 2 3 4 5) for i in ${arr[@]}; do echo $i; done;
-
while循环
#!/bin/bash var=1 while(($var<5)) do echo $var let "var++" done
-
until循环
条件为true时终止循环#!/bin/bash var=1 until [ $var -gt 3 ] do echo $var var=`expr $var + 1` done
-
case
结束标志esac#!/bin/bash var=2 case $var in 1) echo "var=1" ;; 2) echo "var=2" ;; 3) echo "var=3" ;; esac
shell函数
shell函数需要先定义后使用,通过函数名直接调用;函数返回值可以在该函数执行后使用$?
获取;
函数返回值获取
参数传递
echo
- 输出普通字符:
echo hello
或echo "hello"
- echo输出转义字符:`echo -e “\e[1;32m hello\twolrd \e[0m”
- echo不进行转义:
echo '\t'
# 输出\t - echo结果输出到指定文件:
echo hello, shell > file
- 显示命令执行结果:echo `cat file` # 输出hello, shell
- echo以指定颜色输出:
echo -e "\e[1;32m hello\twolrd \e[0m"
支持的颜色列表包括:
字符 | 颜色 |
---|---|
30m | 黑色 |
31m | 红色 |
32m | 绿色 |
33m | 黄色 |
34m | 蓝色 |
35m | 洋红 |
36m | 青色 |
37m | 白色 |
管道符
作用:前一条命令的输出是后一条命令的操作对象;
格式:cmd1 | cmd2 | cmd3 …
示例:cat file | grep how
netstat -an | grep ESTABLISHED | wc -l