나 는 더 이상 걱정 하지 않 겠 다. 스스로 Shell 스 크 립 트 를 배 울 수 없다.
그러나 상고 시대 에 태 어 난 Shell 은 지금 은 시대 에 심각하게 뒤떨어 졌 기 때문에 일련의 가장 좋 은 실천 을 통 해 문법 적 취약 성에 저항 해 야 한다. 다음은 정리 이다.
방어 식 프로 그래 밍, 어 쩔 수 없 는 선택
모든 Shell 스 크 립 트 는 파일 헤더 에 상세 한 설명 을 추가 하 는 것 이 좋 습 니 다.
#!/usr/bin/env bash 指明 Bash
#
# @date: 创建日期
# @author: 作者
# @license: 授权信息
#
# 版权的详细声明
#
# 脚本干嘛用的, 详细说明
set -e 脚本某处出错, 立即退出, 不继续执行
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH PATH变量的设置, 防止子进程找不到命令
스 크 립 트 를 실행 하면 항상 오류 가 발생 하지만 원인 을 찾 을 수 없습니다. 이 때 는 Debug 가 필요 합 니 다.
$ bash -x $file.bash 这样能展示该文件的详细执行过程
기초 문법
变量
var1=value1 = 两边不能有空格
var2=value2
使用变量
"${var1}" 推荐做法, 让你更少出错( 虽然单词更多 )
"${var2}"
数组
arr1=( value1 value2 value3 )
使用数组
# 我也不知道为什么要这样用,但是根据「无法抵抗就好好享受」之定理,咱们先这样用着吧
# 是不是觉得写法特别恶心啊?少年,看你有一双慧眼,不如跟我学......
for val in "${arr1[@]}"; do
done
流程控制
if [ $condition ]; then
$statements
elif [ $condition ]; then
$statements
else
$statements
fi
for $var in $array; do
$statements
done
for (( i=0; i < 10; i++)); do
$statements
done
while [ $condition ]; do
$statements
done
until [ $condition ]; do
$statements
done
case $var in
$first)
$action ;;
$second)
$action ;;
$third)
$action ;;
*)
$action ;;
esac
要点:
1. 注意方括号里面的空格 !
핵심 함수
function $func() {
}
要点
1. 返回值慎用
2. 函数内的变量使用局部变量定义
3. 括号内没有形参
function my_func() {
local var1=value1
echo "func name: $0"
echo "first parameter: $1"
echo "second parameter: $2"
echo "all parameters: ${[@]}"
}
函数使用
my_func $1 $2
규범 화 된 스 크 립 트 예시
#!/usr/bin/env bash
#
# @date: 2016/11/11
# @author: he.zhiming
# @license: BSD
#
# Use BSD License
#
# Example shell script, for test.
set -e
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
var1="value1"
var2="value2"
arr1=( "val1" "val2" "val3" )
if [ -e "${var1}" ] || [ -e "${var2}" ]; then
echo "${var1}"
elif [ -e "${var2}" ] && [-e "${var1}" ]; then
echo "${var2}"
else
echo "nothing"
fi
for val in "${arr1[@]}"; then
echo ${val}
done
while [ "" == "" ]; then
echo "${var1} == ${var2}"
done
[[ -d "$dirname" ]] && cd $dirname && rm * # 这一句处处体现了 Shell 的防御式编程
좋 은 조수 를 청 하 다
셸 은 정말 약해 서 더 많은 신 에 게 도움 을 청 할 수 밖 에 없 었 다.
이때
shellcheck
등장 했다. Haskell
셸 스 크 립 트 를 전문 적 으로 검사 하고 규범 적 인 건 의 를 했다 고 한다.셸 체크 를 사용 하면 행복 감 이 폭 증 합 니 다!그것 은 마치 윗사람 처럼 항상 묵묵히 옆 에 있 고 귀 찮 지 않 게 당신 의 잘못 을 지적 하 며 성질 을 부리 지 않 습 니 다.셸 체크 사용:
安装
sudo apt-get install shellcheck
使用
shellcheck $file.bash
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.