变量
变量名=变量值 a=10 (如果字符串里面有空格,就需要用引号)
unset 变量名 撤销变量
export 变量名 会把变量提升为全局变量
readonly B=2 申明B为只读变量,不能unset
如果把一个命令的结果作为一个变量存储,需要把命令用 “`”括起来。波浪线那个键。
如:
args=`ls -la`
还有另外一种赋值的方式为:args=$(ls -la)
特殊变量
$? 表示上一个命令的状态 输出0表示上一条命令成功执行,返回大于0表示上一条命令失败
$?可以7用于判断上一个命令是否执行成功
$$ 表示当前进程编号
$0 表示获取当前脚本名称
$n 表示n位置的输入参数(n>=1) 用于获取脚本后面跟的参数
$# 表示参数的个数,常用于循环
$*$@都表示参数列表
循环
第一种for循环
for N in 1 2 3
do
echo $N
done
或者
for N in 1 2 3;do echo $N;done
或者
for N in{1..3};do echo $N;done
上面的意思是循环一个列表
-------------------------
第二种for循环
for((i=0;i<=5;i++))
do
echo "hello $i world"
done
或者
for((i=0;i<=5;i++));do echo "hello $i world";done
-------------------
第一种while循环
while expression
do
command
...
done
举例
while [ 2 -gt 1 ]; do echo aaa;done
当2>1执行输出aaa 会一直执行
--------------
第二种while
int=1
while ((int<=3))
do
echo $int
let int++
done
-----------------------------
case语句
case $1 in
start) #case值为start的时候执行
echo "starting"
;;
stop) #case值为stop的时候执行
echo "stoping"
;;
*) #都不匹配的时候执行
echo "Usage:{start|stop}"
esac
运算符
expr m+n 或者$((m+n)) eg:aa=`expr 2+3` echo aa 结果是5
建议用echo $(((2+3)*4)) 计算(2+3)*4
read 命令
read是从终端交互式的获取输入参数
read -p(提示语句)-n(字符个数)-t(等待时间)
[root@node1 shell]# read -p "please enter a number:" numb
please enter a number:1
[root@node1 shell]# echo $numb
1
判断
if condition
then
statements
[elif condition
then statements...]
[else
statements]
fi
例子
#!/mnt/myDir/shell
read -p "please input your name:" NAME
#printf '%s\n'$NAME
if [ $NAME = root ]
then
echo "hello ${NAME},welcome!"
elif [ $NAME = itcast ]
then
echo "hello ${NAME},welcome!"
else
echo "love you !"
fi
要注意前后的空格
另外一种写法
[condition] && echo ok 表示的是条件满足的时候执行
[condition] && echo ok || echo false 条件满足执行ok 条件不满足执行flase
常用判断条件
-r 有读的权限
-w 有写的权限
-x 有执行的权限
-f 文件存在并是一个常规的文件
-s 文件存在且不为空
-d 文件存在且是一个目录
-b 文件存在且是一个设备
-L 文件存在并是一个链接
如[ -f test.txt ] test.txt文件是否存在
自定义函数
[function] funcname [()] #函数无参数
{
#函数体
action;
[return int;]
}
function start() 或者 function start 或者start()
函数列子:
function fSum()
{
echo $1,$2;
return $(($1+$2));
}
fSum 7 5 # 7 5是函数要传递进去的参数
脚本的调试
sh -vx helloWorld.sh 会展示出脚本执行过程中的每一步
或者在脚本中set -x