1 引号: 单引号可避免任何变量扩展,如果要在引号内使用变量,应该使用双引号!
2 shell 模板:变量命名、语法格式等尽量规范,养成好的编程习惯,
#!/bin/sh
#program:
# This program show "Hello Shell!" in you screen!
#
#Histroy:
#2017/6/25 author version
3 shell 中的特殊变量
$0 : 执行的脚本名称
$1 : 执行的脚本第一个参数
$@ : 代表[ “$1" "$2" "$3" "$4" ....]
$# : 表示包含参数的个数。
$*: 代表["$1 $2 $3 $4"]
$_ : 上次使用的指令的最后一个参数或指令本身;
$$ : 目前Shell的进程PID;
$? : 上次执行指令的回传值(返回值);
$RANDOM : 随机数
环境变量:
$PATH, $ HOME, $MAIL, $SHELL,$HOSTNAME, $PWD, $~, $PS1
特别注意:
返回值大于255的情况,应该通过变量返回,而不是$?。
4 由export关键字处理过的变量叫做环境变量
子程序会继承父进程的变量(export);
子进程不会继承父进程的自定义变量(set);
5 read, array, declare
6 等号两边不能有空格;(条件判断的等号两边必须有空格)!
7 条件测试
8 常用程序控制语法的模板
# if 控制语句
if [condition]; then
statements
elsif [condition]; then
statements
else
statements
fi
# for 循环语句
for variable in values
do
statements
done
# while 循环语句
while [condition]; do
statements
done
# until 控制语句
until [condition]; do
statements
done
# case 语句
case variable in
pattern [ | pattern] ....) statements;;
pattern [ | pattern] ....) statements;;
...
esac
9 数据流重定向
以下语句将 stdout 与 stderr 分别存入不同文件中
#> find /home -name .bashrc > out.log 2> error.log
以下语句将 stdout 与 stderr 丢入垃圾箱
#> find /home -name .bashrc > /dev/null 2>&1
10 shell 内置命令
:冒号命令,是一个空命令
echo: 同printf,推荐使用 printf
eval,exec,exit,export,return,set,
shift,trap
11 expect 实现交互控制:经典示例
#!/usr/bin/expect
set timeout 30
spawn ssh -l username 192.168.1.1
expect "password:"
send "ispass/r"
interact
12 切换用户,并执行命令
切换用户只执行一条命令的可以用:
#> su - oracle -c command
切换用户执行一个shell文件可以用:
#> su - oracle -s /bin/bash shell.sh
chmod
chown
fdisk
mkfs
jobs
type
—- 数值运算
declare -i total=
firstnu∗
secnu