shell基础
编写Shell Script的步骤
1、vim xxx.sh
2、编写脚本内容
3、chmod u+x xxx.sh
4、/xxx.sh
# 注释
#! 选择解释器
#!/bin/bash
#!/bin/sh
echo 输出 相当于printf echo自动换行且不支持转义
-n 不换行 -e 支持转义
echo hello echo 'hello' //‘’中的内容即为屏幕显示出来的内容 echo "hello" //在""中可以添加$变量
read 输入,后面可接多个变量
read A B C //连续输入三个变量
执行shell命令时,除命令之外其他部分视为参数
./xxx.sh aaa bbb ccc //默认认为aaa bbb ccc为三个参数
特殊变量
$* 表示此程序的所有参数(不包括$0)
$# 表示此程序的参数个数(不包括$0)
$$ 表示此程序的PID
$! 表示执行上一个后台程序的PID
$? 表示上一个程序的返回值
#!/bin/bash echo $* echo $# echo $$ echo $! echo $?
输出的结果
[qf@localhost linux_share]$ ./shell.sh aaa bbb ccc aaa bbb ccc 3 27014 0
= 赋值 无空格
A="hello world"
B=$A //把A的值赋给B
C=`data` //把命令data的结果赋给C
expr 运算
expr 3 + 4 - 5 //每个符号都要空格 A=`expr 3 + 4 - 5` //将结果赋值给变量 B=`expr 3 \* 5` //乘号*要用转义符 C=`expr 5 + \( 3 + 7 \)` //括号()也要用转义符
test 变量测试
test str1 = str2 判断字符串相等(这里=两侧必须有空格,确保test能够正确识别测试的规则)
test str1 != str2 判断字符串不相等
test str1 判断字符串不为空
test -n str1 判断字符串不为空
test -z str1 判断字符串为空
test int1 -eq int2 判断整数相等
test int1 -ge int2 判断大于等于
test int1 -gt int2 判断大于
test int1 -le int2 判断小于等于
test int1 -lt int2 判断小于
test int1 -ne int2 判断不相等
test -d file 判断文件为目录文件
test -f file 判断文件为普通文件
test -x file 判断文件有可执行权限
test -r file 判断文件有可读权限
test -w file 判断文件有可写权限
test -a file 判断文件存在
test -s file 判断文件大小大于0
if 选择结构
if [ 测试条件 ] then 条件成立时执行的语句 fi
if [ 测试条件 ] then 条件成立时执行的语句 else 条件不成立时的语句 fi
if [ 测试条件1 ] then 条件1成立时执行的语句 elif [ 测试条件2 ] then 条件2成立时执行的语句 elif [ 测试条件3 ] then 条件3成立时执行的语句 else 条件全不成立时的语句 fi
#!/bin/bash read A B if [[ A < B ]] then echo "$B big big" elif [[ A > B ]] then echo "$A big big" else echo "one sheep big" fi
上例 为输入两个数,并比较大小
逻辑
在判断条件中 使用 -a 表示逻辑与
在判断条件中 使用 -o 表示逻辑或
在判断条件中 使用 ! 表示逻辑非
#!/bin/bash read A B if [[ $A < $B && $A = $B ]] then echo "$B big big" elif [[ $A > $B ]] then echo "$A big big" fi
#!/bin/bash read A B if [ $A -lt $B -o $A -eq $B ] then echo "$B big big" elif [[ $A > $B ]] then echo "$A big big" fi
case选择结构
case 数据 in 1)命令1 ;; 2)命令2 ;; 3)命令3 ;; *)不满足123时候的命令 类似于switch的default ;; esac
for循环
for 变量 in 列表 do 循环体 done
举个栗子
打印1-10
for A in 1 2 3 4 5 6 7 8 9 10 do echo "$A" done
列表里可以是数据 可以是变量 也可以是其他命令的执行结果
while循环
while 条件 do 循环体 done
exit(0)
结束脚本
shift 参数左移
类似于<< 参数整体左移一位,丢失第一个参数,参数总数-1
.
$