1 数组
定义一个数组:INTPUTS=(1 2 3);
数组中每个元素使用空格间隔,
- 显示所有元素:
echo ${INPUTS[@]}
- 显示元素个数:
echo ${#INPUTS[@]}
- 获取某个值:
echo ${INPUTS[0]}
使用示例:
数组遍历在循环部分介绍
2 转义和引用
- 特殊字符:
#
一般用于注释;;
分号 多个语句写在一行的时候需要分号隔开\
转义;\n\t\r等,$、" 、\等
- 常用的引用符号
"
双引号'
单引号- ` 反引号(数字键1前面的那个)
需要注意的是,如果有使用变量,那么单引号里面的变量是会被当做普通字符串,
3 运算符
-
赋值
赋值运算符=
,用于算数赋值和字符串赋值;可以使用unset
取消赋值;还可以作为测试操作符号; -
算数
+
(加)、-
(减)、*
(乘)、/(除)、 **(乘方)、%(取余 求模);使用expr
命令进行运算:expr 4 + 5
运行如下:
注意加号两边必须要用空格,同时只能支持整数;expr赋值给一个变量:
注意图中的是反引号; -
数字常量
一般用法是 let “变量名 = 值”,0开头的是8进制,0x开头的是十二进制; -
双圆括号
这个是let 命令得简化版本;一般是((a = 10))、((a++))、echo $((100+20)),测试如下:
4 其他符号
● ()
、(())
、 $()
圆括号
单独使用圆括号会产生一个子shell ( xyz= 123 ),
数组初始化IPS=( 3 test 666 );
● []
、[[]]
方括号
单独使用方括号是测试(test)或数组元素功能,
两个方括号表示测试表达式;
● <>
尖括号重定向符号
● {}
花括号
输出范围echo {0..9}
,一般用于循环
文件复制cp /etc/ passwd{,.bak}
,将etc目录下的password文件复制成password.bat;
5 测试test命令
一般常用语字符串及目录文件是否存在的判断;实例如下:
需要说明的是,在shell里0表示成功,其他非零值表示失败;-d
表示是否存在且是不是文件夹,-f
表示是否存在且是不是文件,-e
表示是否存在且是不是文件或文件夹;
5. if语句
- shell中if语句的结构是
if then
,其基本用法是:
- if [ 测试条件成立或命令返回值是0 ]; then 执行响应的命令;
- 否则fi结束
我们在test.sh中新增如下:
if [ 8 > 4 ]; then
echo "结果正确》"
fi
执行后效果如下:
2. if then else fi
这个用法与上面的类似;基本使用如下:
这条命令是判断当前的用户是不是root,如果是就执行then
,否则就执行else
;
3. 嵌套if; if [ ]; then elif [ ]; then fi
命令同上;基本使用:
7. 循环
- 使用for循环遍历命令的执行结果
基本使用是 :
for 参数 in 列表
do 执行的命令
done 封闭一个循环
使用反引号或者$()方式执行命令,命令的结果会被当做列表处理;
- 使用for遍历变量或文件内容
我们修改test.sh增加下面的语句:
for fileName in `ls`
do
echo "文件名是:$fileName"
done
运行结果如下:
可以看到这里成功输出了当前目录下的所有文件和文件夹;
for中嵌套if使用,修改文件:
for fileName in `ls`
do
if [ -f ${fileName} ]; then
echo "文件名是:$fileName"
else
echo "文件夹是:$fileName"
fi
done
运行后执行结果:
- c风格的for命令
shell中支持c风格的for但是由于shell不擅长做运算,所以这个命令只需要了解:
for ((i=0;i<10;i++))
do
#执行的命令
done #封闭一个循环
执行后运行效果:
- while循环
基本使用是:
while test测试是否成立
do
# 命令语句
done
一般可以用来做交互式菜单,这里就需要死循环写法如下:
while :
do
:
done
- until循环
与while 循环相反。 - break和continue语句
可以退出循环,或者跳过执行下一个循环;修改test.sh如下:
for ((i=0;i<10;i++))
do
#执行的命令
if [ $i = 3 ];then
continue
fi
if [ $i = 5 ];then
break
fi
echo $i
done #封闭一个循环
执行后结果:
可以看到输出跳过的3,并且循环到5就结束了;
- 命令行参数:
● 命令行参数可以使用$1
、$2
、 … 、${10}
、…$n
进行读取;
●$0
代表脚本名称 ;
●$*
和$@
代表所有位置参数;
●$#
代表位置参数的数量;