#!/bin/bash
echo "Hello!!"
for filename in $(ls ~/FPN-caffe);do
echo "${filename} in ~/FPN-caffe"
done
myname="RRL"
readonly myname
unset myname #delete variable but no use for read only variable
greeting="hello,"${myname}"!"
greeting1="hello,${myname}!"
greeting2='hello,'${myname}'!'
greeting3='hello,${myname}!'
echo $greeting $greeting1 $greeting2 $greeting3
echo ${#greeting}
echo ${greeting:1:5}
echo `expr index "${greeting}" o`
array_name=(wang liu he ren zhang)
array_name[5]="zhou"
echo ${array_name[@]}
echo ${array_name[*]}
echo ${#array_name[@]}
echo ${#array_name[0]}
echo "输入的第一个参数:$1"
echo "输入的第二个参数:$2"
echo "输入的第三个参数:$3"
echo "输出所有输入:\$*"
for i in "$*";do
echo ${i}
done
echo "输出所有输入:\$@"
for i in "$@";do
echo ${i}
done
val=`expr 333 + 444`
echo "两数之和为:333+444=${val}"
res=`expr 444 \* 2 / ${val}`
echo "res=${res}"
res1=$((${val} % ${res}))
echo "res1 = ${res1}"
if [ $1 != $2 ]
then
echo "\$1 != \$2"
fi
if [ $1 -lt $2 ]
then
echo "\$1 != \$2"
fi
#布尔运算符
if [ $1 -gt 1 -a $2 -lt 100 ]
then
echo "\$1 > 1 and \$2 < 100"
fi
if [ $1 -gt 1 -o $2 -lt 1 ]
then
echo "\$1 > 1 or \$2 < 1"
fi
#逻辑运算符
if [[ $1 -gt 1 && $2 -lt 100 ]]
then
echo "\$1 > 1 and \$2 < 100"
fi
#文件测试运算符
filename="/home/nbj2017/FPN-caffe/test.sh"
if [ -r ${filename} ]
then
echo "文件可读"
else
echo "文件不可读"
fi
if [ -w ${filename} ]
then
echo "文件可写"
else
echo "文件不可写"
fi
if [ -x ${filename} ]
then
echo "文件可执行"
else
echo "文件不可执行"
fi
if [ -f ${filename} ]
then
echo "普通文件"
else
echo "特殊文件"
fi
if [ -d ${filename} ]
then
echo "是个目录"
else
echo "不是目录"
fi
if [ -s ${filename} ]
then
echo "文件不为空"
else
echo "文件为空"
fi
if [ -e ${filename} ]
then
echo "文件存在"
else
echo "文件不存在"
fi
#echo命令的用法
read name
echo "${name} it is test"
echo -e "OK! \n" #-e开启转义
echo -e "OK! \c" #\c 不换行
echo -e "yes!"
echo '$name \"' #用单引号,原样输出字符串不进行转义或取变量
echo `date` #用`显示执行结果
#printf命令的用法
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg #-代表左对齐, 默认为右对齐
printf "%-10s %-8s %-4.2f\n" 郭靖 男 100.3354
printf '%-10s %-8s %-4.2f\n' 郭靖k 男 79.999 #单双引号效果相同
printf "a string, no processing:<%s>\n" "A\nB"
#test 命令(可以进行数值、字符和文件三个方面的测试)
if test $1 -eq $2 #-ne 不相等 -gt 大于 -ge 大于等于 -lt 小于 -le 小于等于
then
echo "两个数相等!"
else
echo "两个数不相等!"
fi
str1="xiaoliu"
str2="xiaohuang"
if test ${str1} = ${str2} #字符串测试: != 不相等 -z 字符串的长度为零则真 -n 字符串长度不为零则真
then
echo '两个字符串相等'
else
echo '两个字符串不相等'
fi
if test -e ./test.sh #文件测试: -e 文件存在则真 -r 文件可读则真 -w 文件可写则真 -x 文件可执行则真
#-s 文件存在且至少有一个字符则真 -d 文件存在且为目录则真 -c文件存在且为字符型特殊文
#件则真 -f 文件存在且为普通文件则真 -b 文件存在且为块特殊文件则真
then
echo '文件已存在!'
else
echo '文件不存在!'
fi
if test -e ./test.sh -a -w ./test.sh
then
echo 'test.sh 存在并可读'
else
echo 'test.sh 可能不存在或不可读'
fi
##############流程控制################
#if else
a=10
b=20
if [ ${a} == ${b} ]
then
echo "a == b"
elif [ ${a} -gt ${b} ]
then
echo "a>b"
elif [ ${a} -lt ${b} ]
then
echo "a else
echo "没有符合的条件"
fi
#for循环
for loop in 1 2 3 4 5 6
do
echo "${loop}"
done
for strtemp in 'I am OK!' 'dddd'
do
echo "${strtemp}"
done
#while 语句
int=1
while((${int}<=5))
do
echo ${int}
int=$((${int} + 1)) #或 let "int++"
done
echo '按下
echo -n '输入你喜欢的明星:' #-n 表示不换行输出
while read star
do
echo "${star} is really good!"
done
#无限循环
#for (( ; ; ))
#until循环
a=0
until [ ! ${a} -lt 10 ] #条件为false的时候,继续执行循环体内的语句
do
echo ${a}
a=`expr ${a} + 1`
done
#case语句
echo "请输入1到3之间的数:"
echo -n "你输入的是:"
read num
case ${num} in
1) echo '选1'
;;
2) echo '选2'
;;
3) echo '选3'
;;
*) echo '输入有误'
;;
esac
#############shell 函数####################
HelloFun(){ #无参数函数
echo 'shell 函数,啦啦啦'
}
echo "-----shell---"
HelloFun
echo "-----shell---"
FunPlus(){ #有返回值的函数
echo -n '输入第一个要加的数:'
read add1
echo -n '输入第二个要加的数:'
read add2
return $((${add1} + ${add2}))
}
FunPlus
echo "两数之和为 $? !" #$? 代表return的值
FunPlus2(){
echo "第一个参数为:${1} !"
echo "第二个参数为:${2} !"
echo "参数总数为 $# 个!"
echo "作为字符串输出所有参数: $* $@ !"
}
FunPlus2 22 43
echo "脚本运行的当前进程ID: $$"
echo "后台运行的最后一个进程ID: $!"
echo "显示最后命令的退出状态:(0表示没错误) $? !"
##############shell 输入/输出重定向#################
#输出重定向
who > ./test.txt #将会清空已存在的内容
ps >> ./test.txt #将新内容添加在文件后面
echo 'we are good!' >> ./test.txt
#输入重定向
wc -l ./test.txt #会输出文件名
wc -l < ./test.txt #不会输出文件名
'''
Unix/Linux命令运行时都会打开三个文件:
(1) 标准输入文件stdin:stdin的描述符为0, Unix默认从stdin读取数据;
(2) 标准输出文件stdout:文件描述符为1,Unix默认向stdout输出数据;
(3) 标准错误文件stderr:文件描述符为2,Unix向stderr中写入错误信息。
command > file 将stdout重定向到file,command < file 将stdin重定向到file
command 2 > file #将stderr重定向到file
command > file 2>&1 #将stdout和stderr合并后重定向到file
command < file1 > file2 #将stdin重定向到file1,stdout重定向到file2
'''
#Here Documet 将输入重定向到一个交互式shell脚本或程序
wc -l << EOF
大家好
shell学习
加油加油
EOF
#/dev/null文件
#command > /dev/null #/dev/null为一个特殊的文件,写入它的内容将会被丢弃,也无法读取,相当于“禁止输出”
ps > /dev/null 2>&1
###############shell文件包含##########################
'''
两种方式:
(1) . filename
(2) source filename
'''