Shell脚本的HelloWorld:
cd /自己的路径下
vi helloworld.sh 进入之后,默认是命令状态,按i进入编辑模式
内容:
#! /bin/bash
echo "Hello World!"
按ESC,输入:wq回车
chmod +x helloworld.sh
./helloworld.sh
在命令窗口输出了:Hello World!
接下来是Shell编程的一些笔记【可忽略,想系统学习请到推荐的网址!!!】,强烈推荐参考学习网址:http://www.runoob.com/linux/linux-shell.html
shell的知识点小记:
描述的有点儿不容易懂,看了好久才勉强明白 # ## % %%。
#、## 表示从左边开始删除。一个 # 表示从左边删除到第一个指定的字符;两个 # 表示从左边删除到最后一个指定的字符。
%、%% 表示从右边开始删除。一个 % 表示从右边删除到第一个指定的字符;两个 % 表示从左边删除到最后一个指定的字符。
删除包括了指定的字符本身。
shell数组操作小记:
看数组的时候,觉得遍历数组用的比较多,所以自己试着写了写遍历,同时试了一下在SHELL脚本中的变量自增几个写法,在就新手学习的时候注意一下 [ 和 $ 之间要有空格,没有空格运行会报错,新手可能不太注意这一点,我开始就没注意到~~~~
示例如下:
#!/bin/bash
my_arry=(a b "c","d" abc)
echo "-------FOR循环遍历输出数组--------"
for i in ${my_arry[@]};
do
echo $i
done
echo "-------::::WHILE循环输出 使用 let i++ 自增:::::---------"
j=0
while [ $j -lt ${#my_arry[@]} ]
do
echo ${my_arry[$j]}
let j++
done
echo "--------:::WHILE循环输出 使用 let "n++ "自增: 多了双引号,其实不用也可以:::---------"
n=0
while [ $n -lt ${#my_arry[@]} ]
do
echo ${my_arry[$n]}
let "n++"
done
echo "---------::::WHILE循环输出 使用 let m+=1 自增,这种写法其他编程中也常用::::----------"
m=0
while [ $m -lt ${#my_arry[@]} ]
do
echo ${my_arry[$m]}
let m+=1
done
echo "-------::WHILE循环输出 使用 a=$[$a+1] 自增,个人觉得这种写法比较麻烦::::----------"
a=0
while [ $a -lt ${#my_arry[@]} ]
do
echo ${my_arry[$a]}
a=$[$a+1]
done
shell运算符注意事项:
①.使用 [[ ... ]] 条件判断结构,而不是 [ ... ],能够防止脚本中的许多逻辑错误。比如,&&、||、< 和 > 操作符能够正常存在于 [[ ]] 条件判断结构中,但是如果出现在 [ ] 结构中的话,会报错。
②.字符串比较是否为 null 这里:
#!/bin/bash
a=""
if [ -n $a ]
then
echo "-n $a : 字符串长度不为 0"
else
echo "-n $a : 字符串长度为 0"
fi
输出结果为:
-n : 字符串长度不为 0
从结果上看 -n $a 返回 true,这并正确,正确的做法是 $a 这里应该加上双引号,否则 -n $a 的结果永远是 true:
#!/bin/bash
a=""
if [ -n "$a" ]
then
echo "-n $a : 字符串长度不为 0"
else
echo "-n $a : 字符串长度为 0"
fi
输出结果为:
-n : 字符串长度为 0
③.推荐用 $() 代替 ``:
val=`expr 10 + 20`
val=$(expr 10 + 20)
shell printf命令:
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
解释: %-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。%-4.2f 指格式化为小数,其中.2指保留2位小数。
①.如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替,printf "%s and %d \n" ,输出: and 0
②.格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
shell test命令:
-eq 等于为真 -ne 不等于为真 -gt 大于为真
-ge 大于等于为真 -lt 小于为真 -le 小于等于为真
例:
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
shell 传参示例:
#! /bin/bash
read -p "请输入变量a的值:" a
read -p "请输入变量b的值:" b
result=$[a+b]
echo '相加结果为:'$result
示例二:
#! /bin/bash
echo "Shell 传递参数!"
echo "执行的文件名为:$0"
echo "传入的第一个参数为$1"
echo "传入的第二个参数为$2"
echo "传入的第三个参数为$3"
read -p "按任意键退出..."
shell 文件测试:☆
参数 说明
-e 文件名 如果文件存在则为真
-r 文件名 如果文件存在且可读则为真
-w 文件名 如果文件存在且可写则为真
-x 文件名 如果文件存在且可执行则为真
-s 文件名 如果文件存在且至少有一个字符则为真
-d 文件名 如果文件存在且为目录则为真
-f 文件名 如果文件存在且为普通文件则为真
-c 文件名 如果文件存在且为字符型特殊文件则为真
-b 文件名 如果文件存在且为块特殊文件则为真
实例演示:
cd /bin
if test -e ./bash
then
echo '文件已存在!'
else
echo '文件不存在!'
fi
另外,Shell还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!"最高,"-a"次之,"-o"最低。例如:
cd /bin
if test -e ./notFile -o -e ./bash
then
echo '至少有一个文件存在!'
else
echo '两个文件都不存在'
fi
linux shell 文件包含
Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。
Shell 文件包含的语法格式如下:
. filename # 注意点号(.)和文件名中间有一空格
或
source filename
示例:
test1.sh
#! /bin/bash
url=www.baidu.com
test2.sh
#! /bin/bash
. ./test1.sh
echo "百度网址:${url}"
./test2.sh 输出: 百度网址:www.baidu.com