shell脚本学习
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本学习相关的知识,希望对你有一定的参考价值。
Shell脚本是什么
一个Shell脚本是一个文本文件,包含一个或多个命令。
作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些命令在一个文本文件(Shell脚本)来完成这些日常工作任务。
什么是默认登录Shell,如何改变指定用户的登录Shell
在Linux操作系统,“/bin/bash”是默认登陆shell,是在创建用户时分配的。使用chsh命令可改变默认的shell
可在Shell脚本中使用哪些类型的变量
两种类型的变量:
系统定义变量
用户定义变量
“set”命令或 echo $变量名 可查看变量值
特殊变量
test.sh文件中
运行结果:
“#!/bin/bash”的作用
这是shell脚本的第一行,成为(shebang)行,这里#叫做hash,!叫做bang
它的意思是命令通过/bin/bash来执行
如何使脚本可执行
chmod u+x test.sh
如何加入注释
注释以#开头
如何取消变量或变量赋值
unset 变量名
如何让shell就脚本得到来自终端的输入
read命令得到用户的输入并置于你给出的变量中
if
if [ 条件 ];then
命令1
命令2
...
elif [ 条件 ];then
命令1
命令2
...
else
if [ 条件 ];then
命令1
命令2
...
else
命令1
命令2
...
fi
fi
test.sh:
printf "Please Enter Your Name: " read name printf "Please Enter Your score: " read score #[[ $score -lt 90 ]] || { [ $score -lt 90 ] || { echo "hi,$name,you are very good!" } if [ $score -ge 90 ];then echo "hi ${name},you are very good!" elif [ $score -ge 80 -a $score -lt 90 ];then echo "hi $name,you are good!" elif [ $score -ge 60 -a $score -lt 80 ];then echo "hi $name,you are normal!" else echo "who are you??" fi
运行结果:
for
for 变量 in 循环列表
do
命令1
命令2
...
done
test.sh:
for i in {a..z} do if [ -b /dev/sd${i} ];then echo "yes!,disk id /dev/sd${i}" fi done
运行结果:
test.sh:
sum=0 for i in {1..100} do let sum+=i done echo "$sum"
运行结果:
5050
test.sh:
sum=0 for (( i=0; i<=100; i++ )) do let sum+=i done echo $sum
运行结果:
5050
while
while [ 条件 ]
do
命令
done
test.sh:
while [ $# -gt 0 ] do echo $1 shift 1 done
运行结果:
do-while
do
{
命令
}while(条件)
case
case 变量 in
值1)
命令
;;
值2)
命令
;;
*)
命令
;;
esac
test.sh:
case "$1" in start | -s | -S ) echo "your cmd is start" ;; st[oO]p ) echo "your cmd is stop" ;; restart ) echo "your cmd is restart" ;; * ) echo "your cmd is default" ;; esac
运行结果:
until
test.sh:
i=0 sum=0 until [ $i -gt 100 ] do let sum+=i let i++ done echo $sum
运行结果:
5050
shell脚本中“$?”标记的用途是什么
在写一个shell脚本时,如果你想要检查前一条命令是否执行成功,“$?”可以来检查前一条命令的结束状态,0为成功
在shell脚本中如何比较两个数字
可用test 或[ 测试,如:
#!/bin/bash x=10 y=20 if [ x -gt y ];then echo "x > y" else echo "y <= x" fi
在shell脚本中如何比较两个字符串
test.sh:
str="hello WORLD" [ "X$str" == "Xhello world" -o "X$str" == "Xhello WORLD" ] echo $? [ "X$str" == "Xhello WORLD" -a -f "test.sh" -a -d "dir" -a ! "Xstr" == "Xhello bit" ] echo $?
结果:
test.sh:
read str [ "X$str" == "X" ] echo $? [ -z "$str" ] echo $? [ ! -z "$str" ] echo $? [ -n "$str" ] echo $? [ ! -n "$str" ] echo $? [ ! "X$str" != "Xhello" ] echo $?
结果:
在shell脚本中,如何测试文件
test命令 或[命令 ,举例如下:
[ -d 文件名 ]
[ -d "$str" ]
其中-d表示如果文件存在且是目录,返回true,当然也可以是别的选项,不止-d
-e表示如果文件存在,返回true
-f表示如果文件存在且是普通文件,返回true
-r表示如果文件存在并且可读,返回true
-s表示如果文件存在且不为空,返回true
-w表示如果文件存在并且可写,返回true
-x表示如果文件存在并且可执行,返回true
如何执行算术运算
两种方法:
1、使用expr命令
2、$[ 表达式 ],如:
如何将标准输出和错误输出重定向到同一位置
1、如 ls /usr/share/doc > out.txt 2>&1
2、如 ls /usr/share/doc &> out.txt
在shell脚本中如何定义函数
函数是拥有名字的代码块。当我们定义代码块,我们就可以在我们的脚本调用函数名字,该代码块就会被执行。
function 函数名(){
命令
return 0
}
${ }的一些特异功能
定义一个变量:
file=dir1/dir2/dir3/my.file.txt
可以用${ }分别替换获得不同的值:
${file#*/} 拿掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/} 拿掉最后一个 / 及其左边的字符串:my.file.txt
${file#*.} 拿掉第一个 . 及其左边的字符串:file.txt
${file##*.} 拿掉最后一个 . 及其左边的字符串:txt
${file%/*} 拿掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*} 拿掉第一个 / 及其右边的字符串:(空值)
${file%.*} 拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*} 拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my
test.sh:
file=dir1/dir2/dir3/my.file.txt echo ${file#*/} echo ${file##*/} echo ${file#*.} echo ${file##*.} echo ${file%/*} echo ${file%%/*} echo ${file%.*} echo ${file%%.*} echo ${file:0:4} echo ${file:4:5} echo ${file/dir/path} echo ${file//dir/path} echo ${#file}
运行结果:
如何调试shell脚本
1、使用‘-x’参数(bash -x test.sh)
2、使用 ‘-nv‘参数(bash -nv test.sh)
下面有三段代码
1.
cd ..
ls
2.
VAR=45
echo $(($VAR/3))
echo $((16#2a))
3.
DATA=`date`
echo ${DATA}
echo $DATA
DATA=$(date)
echo $DATA
echo the last sunday is $(date -d "last sunday" +%Y-%m-%d)
《完》
本文出自 “零蛋蛋” 博客,请务必保留此出处http://lingdandan.blog.51cto.com/10697032/1789336
以上是关于shell脚本学习的主要内容,如果未能解决你的问题,请参考以下文章