learn-shell

变量定义、输出

foo=bar
echo $foo
echo ${foo}
echo ${foo}barbarbar

使用$()执行命令

# echo $(command)
echo $(pwd)
foo=$(pwd)
echo $foo

使用特殊变量

echo $?      # 输出问题

$0        # 文件名
$1 to $9  # 脚本参数
$#        # 参数个数
$?        # 方法返回值,0代表正常
$@        # 所有的参数
$HOME     # 用户目录
$$        # 进程ID(PID)
!!        # 最后一个命令,包含参数
$_        # 最后一个命令的最后一个参数
$PATH     # 环境变量

字符串

# 单引号和双引号的区别
echo "value of foo is $foo"
echo 'value of foo is $foo'

# 连接
str1=1
str2=2
str3=$str1$str2
echo str3        # 12

# 长度
${#string}

# substring
${string:begin:end}

printf

# 和 C 语言的printf不同点
- 无()
- 使用空格分割参数

printf "%s %s\n" 1 2 3 4

条件语句

if [condition]; then
    ...
elif [condition]; then
	...
else
	... 
fi

# conditions
-eq     ==
-ne     !=
-gt     >
-lt     <
-ge     >=
-le     <=

# other 
=          == for string
!=         != for sring
-z         字符串是否为空
-f/-d      是否是文件/是否是目录
-r/-w/-x   检查权限
-e         文件/目录 是否存在

循环

# while
while [ condition ]; do
	...
done

# break continue可以用

# 示例1
for i in 1 2 3 4 5; do
	echo $i
done

# 示例2
for i in {1..5}; do
	echo $i
done

# 示例3
for (( i = 1; i <= 5; i++ )); done
	echo $i
done

枚举

# {}枚举
{,2,10}枚举 '', '2', '10'
{a..c}枚举 a b c

echo {1..100}

shell 例子

echo "String program at $(date)"
echo "Running program $0 with $# arguments with pid $$"

for file in "$@"; do
    grep foobar "$file" > /dev/null 2> /dev/null

    if [ $? -ne 0 ]; then
        echo "File $file does not hava any foobar, adding one"
        echo "# forbar" >> "$file"
    fi  
done

2> /dev/null 含义

执行shell脚本

# 方法一
bash script.sh

# 方法二
chomd +x script.sh   # 获得运行权限(如果没有运行权限的话)
#!/bin/bash          # 脚本开头必须有
./script.sh

# 方法三
source script.sh   # . script.sh相同功能
my_func            # 直接执行函数名

shell脚本检查

shellcheck script.sh

简单shell脚本

################################
vim my_func.sh
mkcd() {
	mkdir -p "$1"
	cd "$1"
}
source my_func.sh
mkcd test

################################
for foo in hello world
do
	echo $foo
done


##################可以控制键盘灯的有趣功能######################
cd /sys/class/leds/input1::capslock

sudo echo 1 > brightness         # 失败   

sudo 1 | sudo tee brightness     # 成功
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值