shell常用指令整理知识点-1
linux 常用命令选项
选项 描述
-a 显示所有对象
-c 生成一个计数
-d 指定一个目录
-e 扩展一个对象
-f 指定输入数据的文件
-h 显示命令的帮助信息
-i 忽略文本大小写
-l 产生输出的长格式版本
-n 使用非交互模式
-o 将所有输出重定向到指定的输出文件
-q 安静模式运行
-r 递归的处理目录和文件
-s 安静模式运行
-v 生成详细输出
-x 排除某个对象
-y 对所有问题回到yes
if 嵌套命令
if command1
then
command1 set 1
elif command2
then
command2 set 2
elif command3
then
command3 set 3
fi
demo:
if [ condition ]
then
commands
fi
test 命令
如果test命令中测试的条件成立,test命令就会退出并返回状态码0。如果条件不成立,则test命令退出并返回非零的状态。
test命令可以用于判断三类条件:
1.数值比较
2.字符串比较
3.文件比较
使用方式
test condition condition是一系列的参数和值。
if test condition
then
commands
fi
demo:
#!/bin/bash
if test
then
echo "No expression return a True"
else
echo "No expression a False"
fi
加入变量内容
#!/bin/bash
m_variable="Full"
if test m_variable
then
echo "No expression return a True"
else
echo "No expression a False"
fi
1、数值比较
数值测试比较
比较 功能描述
n1 -eg n2 检查n1是否与n2相等
n1 -ge n2 检查n1是否大于或等于n2
n1 -gt n2 检查n1是否大于n2
n1 -le n2 检查n1是否小于或等于n2
n1 -lt n2 检查n1是否小于n2
n1 -ne n2 检查n1是否不等于n2
demo:
#!/bin/bash
value1=10
value2=11
if [ $value1 -gt 5 ]
then
echo "The test value $value1 is greater than 5"
fi
if [ $value1 -eq $value2 ]
then
echo "The values are equal"
else
echo "The values are different"
fi
注意涉及浮点值,数值测试会有一个限制。bash shell只能处理整数。
字符串比较
字符串测试比较
比较 描述
str1 = str2 检查str1是否和str2相等
str1 != str2 检查str1是否和str2不同
str1 <> str2 检查str1是否比str2小
str1 > str2 检查str1是否比str2大
-n sstr1 检查str1长度是否非0
-z str1 检查str1长度是否为0
-n 和 -z可以检查一个变量是否含有数据
demo:
#!/bin/bash
testuser=rich
if [ $USER = $testuser ]
then
echo "Welcom $testuser"
fi
if [ $USER != $testuser ]
then
echo "This is not $testuser"
else
echo "Welcome $testuser"
fi
demo1:
#!/bin/bash
val1=Testing
val2=testing
if [ $val1 \> $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi
文件比较
test文件比较功能
比较 描述
-d file 检查file是否存在并且是一个目录
-e file 检查file是否存在
-f file 检查file是否存在并且是一个文件
-r file 检查file是否存在并且可读
-s file 检查file是否存在并且非空
-w file 检查file是否存在并且可写
-x file 检查file是否存在并且可执行
-0 file 检查file是否存在并且属于当前用户所有
-G file 检查file是否存在并且默认组与当前用户相同
file1 -nt file2 检查file1是否比file2新
file2 -ot file2 检查file1是否比file2旧
demo:
#!/bin/bash
jump_dir=/home/autochry
if [ -d $jump_dir ]
then
echo "$jump_dir dir exists"
cd $jump_dir
ls -lh
else
echo "$jump_dir dir does not exist"
fi
符合条件测试:
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]
#!/bin/
if [ -d $home ] && [ -w /home/autochry ]
then
echo "############"
else
echo "************"
fi
case命令:
格式
case variable in
pattern1 | pattern2) commands1;;
pattern2) commands2;;
*) default commands3;;
esac
demo:
#!/bin/bash
case "$1" in
start)
killall brcm_patchram_plus1
killall bsa_server
check_not_exist.sh bsa_server
echo 0 > /sys/class/rfkill/rfkill0/state
sleep 1
echo 1 > /sys/class/rfkill/rfkill0/state
sleep 1
echo "|----- open ------|"
;;
stop)
echo "Stopping broadcom bsa bluetooth server"
echo "|----- close -----|"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
for 语句
格式:
for var in list
do
commands
done
demo:
#!/bin/bash
for test in Alabama Alaska Arizona Arkansas Califonia Colorado
do
echo Test next state is $test
done
特例,需要注意的点:
#!/bin/bash
for test in I don't know if this'll work
do
echo "Word:$test"
done
输出:
Word:I
Word:dont know if thisll
Word:work
改进:
#!/bin/bash
for test in I don't know if "this'll" work
do
echo "Word:$test"
done
输出:
Word:I
Word:don't
Word:know
Word:if
Word:this'll
Word:work
变化:
for test in Nevada "New Hampshire" "New Mexico" "New Work"
do
echo "Word:$test"
done
输出:
Word:Nevada
Word:New Hampshire
Word:New Mexico
Word:New Work
从变量读取列表
#!/bin/bash
list="New Hampshire New Mexico New Work"
list=$list" Connecticut"
echo "${list}"
for test in $list
do
echo "Word:$test"
done
输出:
New Hampshire New Mexico New Work Connecticut
Word:New
Word:Hampshire
Word:New
Word:Mexico
Word:New
Word:Work
Word:Connecticut
使用通配符读取目录
#!/bin/bash
for file in /home/demo/vlc_example/*
do
if [ -d "$file" ]
then
echo "$file is a directory"
elif [ -f "$file" ]
then
echo "$file is a file"
fi
done
输出:
/home/autuchry/vlc_example/mp3_src is a directory
/home/autuchry/vlc_example/play_contrl is a directory
/home/autuchry/vlc_example/play_events is a directory
/home/autuchry/vlc_example/play_list is a directory
/home/autuchry/vlc_example/play_log is a directory
/home/autuchry/vlc_example/play_mp3 is a directory
/home/autuchry/vlc_example/play_thread is a directory
/home/autuchry/vlc_example/readme.txt is a file
/home/autuchry/vlc_example/vlc_include is a directory
while 格式
while test command
do
other commands
done
示例:
#!/bin/bash
var1=10
while [ $var1 -gt 0 ]
do
echo "var1 value: " $var1
var1=$[ $var1 - 1 ]
done
输出:
var1 value: 10
var1 value: 9
var1 value: 8
var1 value: 7
var1 value: 6
var1 value: 5
var1 value: 4
var1 value: 3
var1 value: 2
var1 value: 1
until命令
until test commands
do
other commands
done
示例:
#!/bin/bash
var1=100
until [ $var1 -eq 0 ]
do
echo "var1 value: " $var1
var1=$[ $var1 - 25 ]
done
输出:
var1 value: 100
var1 value: 75
var1 value: 50
var1 value: 25
控制循环: break指令 和 continue指令
break n 指定跳出几级循环
#!/bin/bash
var1=100
for var1 in 1 2 3 4 5 6 7 8 9 10
do
if [ $var1 -eq 5 ]
then
break
fi
echo "var1 value: " $var1
done
输出:
var1 value: 1
var1 value: 2
var1 value: 3
var1 value: 4
continue指令
#!/bin/bash
for (( var1 = 1; var1 < 15; var1++ ))
do
if [ $var1 -gt 5 ] && [ $var1 -lt 10 ]
then
continue
fi
echo "Interation number: $var1"
done
输出:
Interation number: 1
Interation number: 2
Interation number: 3
Interation number: 4
Interation number: 5
Interation number: 10
Interation number: 11
Interation number: 12
Interation number: 13
Interation number: 14