简介
shebang
在Unix中,shebang其实就是指”#!”,取自#(Sharp)和!(bang)。脚本中只有第一行可以使用shebang来定义解释该脚本所使用的解释器。
登录提示符
- $表示普通用户
- #表示超级用户
执行方式
将脚本名作为命令行参数
bash myScript.sh
授予脚本执行权限,将其变为可执行文件
chmod 755 myScript.sh ./myScript.sh
如果将脚本作为bash的命令行参数来运行,那么就用不着使用shebang了
符号
- shell使用分号或换行符来分割单个命令或命令序列
- 注释部分以#为起始,一直延续到行尾
- 双引号允许Shell解释字符串中出现的特殊字符,单引号不会对其做任何解释
彩色打印
"\e[1;31m xxx \e[0m"
文本颜色是由对应的色彩码来描述。其中包括:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37
彩色背景,经常使用的颜色码是:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47
命令
printf
printf "%-5s %-10s %-4.2f\n" 1 Sarath 80.3456
echo
-n:禁止输出文本的尾部追加换行符
-e:使用转义字符
实例
获取变量长度
${#var}
识别shell类型
echo $SHELL
echo $0
检测是否为超级用户
if [ $UID -ne 0 ];then
echo xxx
else
echo xxx
fi
算术运算
let
a=3 b=7 let result=a+b let result-- echo ${result}
[]
a=3 b=7 echo $[a+b] echo $[a+b-2]
(())
expr
bc
重定向脚本内部文本块
#!/bin/bash
cat <<EOF >log.txt
hello, world
EOF
数组与关联数组
定义数组
array_var=(test1 test2 test3 test4)
打印内容
echo ${array_var[0]} index=4 echo ${array_var[index]}
遍历
echo ${array_var[*]} echo ${array_var[@]}
打印长度
echo ${#array_var[*]}
终端
#禁止回显
stty -echo
#运行回显
stty echo
函数
函数定义
function fname() { statements; } fname() { statements; } fname() {statements;}
函数调用
fname
函数参数
fname arg1 arg2
函数导出
export -f fname
循环
面向列表的for循环
for var in list; do commands; done
迭代指定范围的数字
for ((i=0;i<10;i++)) { commands; }
循环到条件满足
while condition do commands; done
比较与测试
if条件
if conditions;then commands; fi
else if和else
if condition;then commands; else if condition;then commands; else commands; fi
[ condition ] && action; #如果条件为真,则执行action
[ condition ] || action; #如果条件为假,则执行action
操作符 | 含义 |
---|---|
-gt | 大于 |
-lt | 小于 |
-ge | 大于或等于 |
-le | 小于或等于 |
[ -f $file_var ] | 变量包含正常的文件路径或文件名,则返回真 |
[ -x $var ] | 变量包含的文件可执行,则返回真 |
[ -d $var ] | 变量包含的是目录,则返回真 |
[ -e $var ] | 变量包含的文件存在,则返回真 |
[ -c $var ] | 变量包含的是一个字符设备文件的路径,则返回真 |
[ -b $var ] | 变量包含的是一个块设备文件的路径,则返回真 |
[ -w $var ] | 变量包含的文件可写,则返回真 |
[ -r $var ] | 变量包含的文件可读,则返回真 |
[ -L $var ] | 变量包含的是一个符号链接,则返回真 |