SHELL脚本
-
切换shell:
usermod -s /bin/csh
-
查看当前shell的编号
echo $$
-
查看shell之间的嵌套状态:
pstree -P
(显示进程树) -
当前的shell的层级:
echo $SHLVL
-
shell脚本:语法检查:
bash -n name.sh
; 调试检查:bash -x name.sh
-
普通变量:只能对当前的shell中有效,在父shell以及子shell中都无效
-
环境(全局)变量: 使用
export var
或者declare -x var
定义变量 -
打印全部环境变量:
export/declaer -x
或者/env/
或者printenv
-
显示全部变量:
set
-
撤销变量:
unset var
(建议在shell脚本结束时删除变量避免干扰,因为是在当前shell中定义的变量) -
远程备份文件:
scp -arv /etc/ IP:/date/
-
注:在脚本中调用另外的shell脚本相当与开启了子shell
-
双引号:弱类型表达,可执行引号中的命令引用
-
单引号:强类型表达,直接输出引号中的字符串
-
变量的引用: 使用$var 或者 ${var}
-
命令的引用:
command
或者 $(command)- 注:在
var=$(command)
时,如果有多行内容 - ${var} 或者 $var的打印,会将内容按一行打印,没有换行
- “${var}” 或者 "$var"的打印,会将空白分隔符转成换行显示
- 注:在
-
bash中的算数运算(关键字let),语法形式如下:
let var=算数表达式
var=$[算数表达式]
var=$((算数表达式))
echo '算数表达式' | bc
-
支持+=, -=, *=, /=, %=, --, ++ 运算 逻辑运算
-
bash中的条件测试命令
- test EXPRESSION
- [ EXPRESSION ] :标准写法是对其中的变量引用以及字符串都加双引号
- [[ EXPRESSION ]] :一般用在包含正则表达式的情况下
- 注意:EXPRESSION前后必须有空白字符
- && 代表条件性的AND THEN (等价于-a) ; || 代表条件性的OR ELSE (等价于-o)
-
“==”
表示字符串间的判定 -
“-eq”
表示数字间的判定(也需要在变量引用两侧使用双引号)
-
接受终端的输入,
read
-p: 指定要显示的提示信息
-s: 静默输入,用于密码输入 -
条件语句以及循环语句
- if语句的格式为:
if[ 判断条件 ];then
statement
elif[ 判断条件 ];then
statement
else
statement
fi
- case语句的格式为:
case 变量引用 in
PAT1)
statement
;;
PAT2)
statement
;;
esac
- for语句的格式为:
for 变量名 in 列表;do for ((init;条件表达式;控制变量的修正));do
statement statement
done done
- while语句的格式为:
while 条件; do
statement
done
- 函数的格式:
fName(){
statement;
}
-
调用函数与调用脚本的区别:
- 调用函数不会开启子shell (因此函数定义的变量会影响脚本中的变量,给函数中的变量加local关键字)
- 调用脚本会开启子shell
-
一般将函数写入特定的文件中:
functions
-
在脚本中调用函数的时候首先输入
source /path/to/functions
-
declare -f
:显示当前系统中的所有程序 -
位置参数变量:$1、 $2 、、、${10} 用来表示传递给命令的参数
-
特殊变量:
- $? 用来表示最近一次命令的执行结果(可以判定命令是否成功执行 0)
- $0 表示脚本名称本身
- $@: 表示全部的输入变量,并且是按空格分开的
- $# 表示变量数量
- $*: 表示全部的输入变量,并且是按空格分开的
- $@ 和 $* 在带了双引号的时候有区别
- “$@” 表示按空格分开的字符
- “$*” 表示将全部的输入整合成一个字符串
-
数组操作:
- 引用数组元素: ${ARRAY_NAME[INDEX]} 注意:省略[INDEX]表示引用下标为0的元素
- 引用数组所有元素: ${ARRAY_NAME[*]} ${ARRAY_NAME[@]}
- 数组的长度(数组中元素的个数): ${#ARRAY_NAME[*]} ${#ARRAY_NAME[@]}
- 删除数组中的某元素:unset ARRAY[INDEX]
- 删除整个数组: unset ARRAY
网友评论