shell

2019-05-31  本文已影响0人  loopppp

变量相关

管道相关命令

常用命令

read -p "请输入三个参数: " arg1 arg2 arg3
字符 作用
\a 发出警告声
\b 删除前一个字符
\c 最后不加上换行符
\f 换行但光标仍停留在原来的位置
\n 换行且光标移至首行
\r 光标移至首行但不换行
\t 插入tab
"\" 插入\
" 插入"
declare -a arr;arr[1]=1;arr[3]=2;
echo ${arr[3]}   //输出2
#文件或者目录搜索
ls -l | grep "dirname"
#文件中查找特定字符
ls -l | grep "filename" | grep "str"
#检索特定进程
ps -aux | grep "processname"

特殊符号和通配符

echo "当前工作目录是:" `pwd`
常用正则表达式 作用 示例表达式
* 匹配任意个字符,可以为0或多个 a*b
? 匹配一个字符 a?b
[list] 匹配list中的一个字符 a[abc]b
[^list] 匹配除list中的任意一个字符a[^abc]b
[c1-c2] 匹配c1到c2之间的所有字符,字符序列必须连续,如a-c a[1-5]b
. 匹配任意一个字符 .*abc
x\{m\} 字符x重复出现m次 x\{3\}
x\{m,\} 字符x至少出现m次 x\{3,\}
x\{m,n\} 字符x重复出现m到n次 x\{2,5\}

逻辑控制语句

#单个条件判断
if [条件判断];then
     处理
fi
#多个条件判断
if [条件1]
then
    处理1
elif[条件2]
then
    处理2
else
    处理3
fi
test expression
test命令选项 作用
-e 判断文件是否存在
-f 判断文件是否存在且是否是文件
-d 判断文件是否存在且是否是目录文件
-c 判断文件是否存在且是否是设备文件
-S 判断文件是否存在且是否是socket文件
-p 判断文件是否存在且是否是管道文件
-L 判断文件是否存在且是否是链接文件
-nt test file1 -nt file2判断文件1是否比文件2新
-ot test file2 -ot file2判断文件1是否比文件2旧
-rwx test -[rwx] file判断文件相关的读写执行权限
符号 作用
test n1 -eq n2 判断数字1和数字2是否相等
test n1 -ge n2 判断数字1是否大于等于数字2
test n1 -gt n2 判断数字1是否大于数字2
test n1 -le n2 判断数字1是否小于等于数字2
test n1 -lt n2 判断数字1是否小于数字2
test n1 -ne n2 判断数字1是否不等于数字2
运算符 作用
!exp 如果exp为假,则返回真
exp1 -a exp2 如果两个表达式同事为真,返回真
exp1 -o exp2 如果两个表达式中有一个为真,返回真
echo -n "输入一个数:"
read n
case $n in
1)...
2)...
....
5)...
*)...
esac
select choice in 1 2 3 4 5
do
    break
done
echo "you choose No.$choice"

循环结构

for 变量 in 列表
do
  commands
done

#示例,用来遍历目录
for file in $(ls /home)
do
    ...
done
for((exp1;exp2;exp3))
do
    ...
done

#示例
for((i=1;i<=10;i++))
do
    echo $i
done
while test expression
do
    ...
done

#示例
index=1
while [ $index -le 6 ]
do
    echo $index
    let index++
done

函数和数组

function name
{
    commands
}
#或者可以省略function关键字,用括号代替
name()
{
    commands
}
  • $0表示函数名
  • $1表示第一个参数,以此类推且最多能传进来9个参数
  • $#表示一共传进来几个参数
#数组的声明方式如下
arr=(1,2,3,4,5)
#也可以使用declare关键字声明
declare -a arr=(1,2,3,4,5)
#使用一个数组变量的格式,下标从0开始,shell中的数组没有越界的概念。如果超过了范围,输出为空
${arr[1]}
#表示数组的所有元素
${arr[*]}
#表示数组的长度
${#arr[*]}
  • 当调用函数传入数组参数时,必须将数组中每个元素一个个传进去,常常使用"${arr[*]}"的格式
  • 在函数内部使用数组时,需要声明一个局部数组变量去接收数组,才能使用
arr=(1 2 3 4 5)
echo "arr[*]=${arr[*]}"
echo "the length of arr = ${#arr[*]}"
echo "arr[1]=${arr[1]}"
func1()
{
    local temp=($1)
    echo "total args = $#"
    echo "the array arg:${temp[*]}"
    echo "the array arg:$@"
    return 0
}

func2()
{
    local old=($1)

    for((i=0;i<${#old[*]};i++))
    {
        old[$i]=$[${old[$i]}*2]
    }
    echo ${old[*]}
}

echo "函数中接收数组参数并输出"
func1 "${arr[*]}"

echo "函数中接受数组参数并将原值翻倍再返回回来输出"
newarr=`func2 "${arr[*]}"`
echo "newarr=${newarr[*]}"

文件处理相关命令

mount /dev/sdax dest
fdisk -l
umount  /dev/sdax dest
上一篇 下一篇

猜你喜欢

热点阅读