Linux 的选项又分为短格式选项和长格式选项。
- 短格式选项是长格式选项的简写,用一个减号
-
和一个字母表示,例如ls -l
。 - 长格式选项是完整的英文单词,用两个减号
--
和一个单词表示,例如ls --all
command1;command2...
--不管command1命令是否执行成功,command2命令都执行。
command1&command2...
--command1命令和command2命令同时执行
command1&&command2...
--只在command1命令执行后,才执行command2命令。
如:
如果白天工作下载或是编译代码太浪费时间可以,将任何放在指定时间执行命令自动编译:
sleep 7h && make -j8 2>&1 |tee build-log.txt
Shell知识
$ 美元符号:即使用之前已定义了的变量,变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,推荐给所有变量加上花括号,这是个好的编程习惯。
your_name="qinjx"
echo $your_name
echo ${your_name}
单行注释 以 # 开头的行就是注释,会被解释器忽略。
多行注释 可以使用以下格式:
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
传递参数
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名:
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
为脚本设置可执行权限,并执行脚本,输出结果如下所示:
执行 chmod +x test.sh
执行 ./test.sh 1 2 3
输出结果:
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,
条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。如 val=`expr 2 + 2`
= 放在别的地方是赋值,放在if [ ] 里就是字符串等于,shell里面没有==的,那是c语言的等于
If [ $ANS ] 等价于 if [ -n $ANS ]
如果字符串变量非空(then) , 空(else)
echo "input your choice:" read ANS if [ $ANS ] then echo no empty else echo empth fi |
传统if 从句子——以条件表达式作为 if条件
if [ 条件表达式 ]
then
command
command
command
else
command
command
fi
条件表达式
- 文件表达式
if [ -f file ] 如果文件存在
if [ -d ... ] 如果目录存在
if [ -s file ] 如果文件存在且非空
if [ -r file ] 如果文件存在且可读
if [ -w file ] 如果文件存在且可写
if [ -x file ] 如果文件存在且可执行
- 整数变量表达式
if [ int1 -eq int2 ] 如果int1等于int2
if [ int1 -ne int2 ] 如果不等于
if [ int1 -ge int2 ] 如果>=
if [ int1 -gt int2 ] 如果>
if [ int1 -le int2 ] 如果<=
if [ int1 -lt int2 ] 如果<
- 字符串变量表达式
If [ $a = $b ] 如果string1等于string2
字符串允许使用赋值号做等号
if [ $string1 != $string2 ] 如果string1不等于string2
if [ -n $string ] 如果string 非空(非0),返回0(true)
if [ -z $string ] 如果string 为空
if [ $sting ] 如果string 非空,返回0 (和-n类似)