练习所编写的shell脚本存放路径:/home/benjamin/bin
#!/bin/bash
# Program:
# this program shows "Hello world!" in your screen.
# this is my first shell script.
#
# author:Benjamin
# date:2019.8.21
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello World! \a \n"
exit 0
输入命令:
read -p "Please input (Y/N): " yn
参考python的语法,这里字符串部分为提示语句,yn为存储输入的变量
(2).简单加减乘除
read -p "first number: " firstNum
read -p "secound nmumber: " secoundNum
total=$(( ${firstNum} * ${secoundNum} ))
利用$((计算式))可以进行数值运算,仅支持整数.
会使用一个新的bash环境来执行脚本内的命令,也就是子进程中执行.重点在于当子进程完成后,子进程中的各种变量和操作不会穿回到父进程中.
在父进程中执行,用于生效系统中的各种配置文件.
test命令可以对文件属性,表达式,字符串进行一定程度的判断.
<<鸟哥>>P395
除了test命令之外,也可以使用判断符号[ ](中括号)进行数据的判断.
[ "${yn}" == "y" -o "${yn}" == "Y" ]
中括号中的每个组件都要有扣个相隔,变量(避免其值被作为变量名)和常数都应使用双引号引起来,
#!/bin/bash
# Program:
# get 1 input, if it is "y" or "n", print something.
#
# author:Benjamin
# date:2019.8.21
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "Please input (Y/N): " yn
[ "${yn}" == "y" -o "${yn}" == "Y" ] && echo "OK, countinue" && exit 0
[ "${yn}" == "n" -o "${yn}" == "N" ] && echo "Ok, interrupt" && exit 0
echo "I don't know what your choice is" && exit 0
exit 0
/path/to/scriptname opt1 opt2 opt3 opt4
$0 $1 $2 $3 $4
以上代码展示了一个命令的执行在脚本内部的参数表示,$0为命令的脚本文件名,$1~$4分别为可以附加的变量
还有一些特殊用法:
语法:
# 多个条件判断(if...elif...elif...else)分多种不同情况执行
if [ 条件判断式一 ];then
满足条件判断式一执行的命令.
elif [ 条件判断式二 ];then
满足条件判断式二执行的命令.
else
当不满足前两种条件判断式时执行的代码
fi
语法:
case $变量名称 in #关键字为case,变量名称前有美元符号
"第一个变量内容")
程序段
;;
"第二个变量内容")
程序段
;;
*) #最后用*代表其他的所有其他值
不包含前两个变量内容执行的程序段
;;
esac
语法:
function fname(){
程序段
}
# 调用
fname opt1 opt2 opt3
就是寻常编程语言中的方法
内置变量与shell脚本的变量很类似,$0代表函数名,$1$2…代表括号中的后续变量.
语法:
# while循环意为当condition为真时一直进行循环
while [ condition ] # condition是一个判断式
do
程序段落
done
# until循环意为一直进行循环,直到condition为真时退出循环
until [ condition ]
do
程序段落
done
语法:
for var in con1 con2 con3...
do
程序段
done
# 使用以下方式生成序列来代替con1 con2 con3
$(seq 1 100) ==> 1 2 3 4 5...100
{1..100} ==> 1 2 3 4 5...100
{a..z} ==> a b c d e...z
类似与Python中的for循环,或Java中的foreach循环.
在每一次循环中,var的值分为为con1,con2,con3.
for循环的另外一种写法:
for(( 初始值; 判断式; 运算 ))
do
程序段
done
类似Java和c中的for循环.