Shell编程的基本用法
1.Shell中的特殊字符
# | 注释 |
; | 命令分隔符,可以将多个语句放在一个行执行 |
‘ ‘ | 强引用,在单引号中无法引用变量 |
“ “ | 类似于‘’,单支持变量 |
` ` | 引用命令结果 |
2.变量
命名规则:以字母开头,可以使用数字字母
变量定义:declare varName
变量赋值:varName=值
变量值引用: $varName
导出变量: export varName[=value]
撤销变量: unset varName
特殊变量:
$?:返回上一条命令的状态返回值
$1,$2...:位置变量
$#:脚本传入的所有参数个数
$*,$@:返回脚本传入的所有参数
3.条件测试
使用格式:
test EXPR
[ EXPR ]
[[ EXPR ]]
文件测试 | |||
-a |–e 文件是否存在 | -S file套接字文件 | -f 普通文件 | -p 命名管道文件 |
-d 目录 | -s 是否为空 | -L 符号链接 | -r 是否可读 |
-b 块设备 | -w 是否可写 | -x 是否可执行 | -c字符块设备 |
FILE1 -nt FILE2 :FILE1的mtime是否新与FILE2 | FILE1 -ot FILE2 :FILE1的mtime是否旧与FILE2 |
整数 | |
-gt 大于 | -ge 大于等于 |
-eq 等于 | -le 小于等于 |
-lt 小于 | - ne不等于 |
字符测试 | ||
> 大于 | < 小于 | <= 小于等于 |
>= 大于等于 | == 等于 | != 不等于 |
-n string 是否不空 | -z string 是否为空 |
4.输入输出和重定向
标准输入:0 默认设备为键盘
标准输出:1 默认设备为显示器
标准错误输出:2 默认设备为显示器
>::覆盖输出 &>错误覆盖输出
>> :追加输出 &>>错误覆盖输出
&>:合并重定向
<:输入重定向
<<:此处文档
tee:分流,将结果输出到屏幕并重定向
5.Shell脚本格式
第一行顶格"#!/path/to/a/shell"
6.常用语法结构
if then else语句:
if 条件 1
then 命令1
elif 条件 2
then 命令2
else
命令3
fi 完成
如果if和then在同一行那命令格式为 if 条件1;then
eg
#!/bin/bash
#name.sh
echo -n "Enter youname:"
read NAME
if [ "$NAME" == "" ]; then
echo "you did not enter you name"
else
echo "you name is: $NAME"
fi
####保存退出,chmod +x name.sh
#### 运行 ./name.sh
[root@localhost ~]# ./name.sh
Enter you name:tony (这个名字你是输入的)
you nameis: tony
for循环:
for 变量名 in 列表
do
命令1
命令2
done
#!/bin/bash
#
declare -i idsum=0
for userid in `cut -d: -f3/etc/passwd`;do
idsum=$[$idsum+$userid]
done
echo $idsum
当变量值在列表里,for循环即执行一次所有命令,使用变量名访问列表中取值,命令可为任何有效的shell命令和语句,变量名
为任何单词,in列表用法是可选的,如果不用它,for循环使用命令行的位置参数。in列表可以包含替换,字符串和文件名。
until循环:
until 条件
do
命令1
命令2
...
done
条件可以为任意测试条件,测试发生在循环末尾,因此循环至少执行一次
#!/bin/bash
#
read -p "Plz enter ausername: " userName
until who | grep"\<$userName\>" &> /dev/null; do
sleep 5
echo "not here"
done
echo "here"
while循环:
while 命令
do
命令1
命令2
...
done
在while和都之间虽然通常指使用一个命令,但可以放几个命令,命令通常用作测试条件
1、显示如下信息:
Plz choose a compress tool:
用户可键入:gzip, bzip2或xz;
2、提醒用户指定要归档压缩的文件
3、将用户归档压缩至/tmp目录中,文件名为原名加上相应的后缀;
#!/bin/bash
#
read -p "Plzchoose a compress tool:" tools
while [ "$tools" == "gzip"-o "$tools" == "bzip2" -o "$tools" =="xz" ];do
read -p "Plz input a file" file
while [ -e $file ]; do
echo "PIZ"
if
done
由于本人才疏学浅,bash脚本还很不熟悉。请见谅
转载于:https://blog.51cto.com/19930523/1535059