示例
#!/bin/sh
cd ~
mkdir shell_tut
cd shell_tut
for ((i=0; i<10; i++)); do
touch test_$i.txt
done
示例解释
第1行:指定脚本解释器,这里是用/bin/sh做解释器的
第2行:切换到当前用户的home目录
第3行:创建一个目录shell_tut
第4行:切换到shell_tut目录
第5行:循环条件,一共循环10次
第6行:创建一个test_0…9.txt文件
第7行:循环体结束
mkdir, touch都是系统自带的程序,一般在/bin或者/usr/bin目录下。for, do, done是sh脚本语言的关键字
变量
定义变量时,变量名不加美元符号($),如:
your_name="qinjx"
注意,变量名和等号之间不能有空格
使用一个定义过的变量,只要在变量名前面加美元符号即可
your_name="qinjx"
echo $your_name
echo ${your_name}
以“#”开头的行就是注释,会被解释器忽略。
shell没有多行注释
字符串可以用单引号,也可以用双引号,也可以不用引号
单引号字符串的限制:
单引号的任何字符都会原样输出,单引号字符串中的变量是无效的
单引号字串中不能出现单引号(对单引号使用转义符后也不行
双引号里可以有变量,也可以出现转义字符
your_name='qinjx'
str="Hello, I know your are \"$your_name\"! \n"
拼接字符串
your_name="qinjx"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
获取字符串长度
string="abcd"
echo ${#string} #输出:4
提取子字符串
string="alibaba is a great company"
echo ${string:1:4} #输出:liba
查找子字符串
string="alibaba is a great company"
echo `expr index "$string" is`#输出:3,这个语句的意思是:找出字母i在这名话中的位置,要在linux下运行,mac下会报错
if
if condition1
then
command1
elif condition2
command2
else
commandN
fi
C语言风格的for
for (( EXP1; EXP2; EXP3 ))
do
command1
command2
command3
done
for
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
参照资料
Advanced Bash-Scripting Guide 非常详细,非常易读,大量example,既可以当入门教材,也可以当做工具书查阅